});
}
-// TODO(6838553)
-#ifndef __clang__
template <class T>
-template <class... Args>
-auto Future<T>::then(Executor* x, Args&&... args)
- -> decltype(this->then(std::forward<Args>(args)...))
+template <class Executor, class Arg, class... Args>
+auto Future<T>::then(Executor* x, Arg&& arg, Args&&... args)
+ -> decltype(this->then(std::forward<Arg>(arg),
+ std::forward<Args>(args)...))
{
auto oldX = getExecutor();
setExecutor(x);
- return this->then(std::forward<Args>(args)...).via(oldX);
+ return this->then(std::forward<Arg>(arg), std::forward<Args>(args)...).
+ via(oldX);
}
-#endif
template <class T>
Future<void> Future<T>::then() {
}
template <class T>
-template <typename Executor>
inline Future<T> Future<T>::via(Executor* executor) && {
throwIfInvalid();
}
template <class T>
-template <typename Executor>
inline Future<T> Future<T>::via(Executor* executor) & {
throwIfInvalid();
}
// via
-template <typename Executor>
-Future<void> via(Executor* executor) {
+inline Future<void> via(Executor* executor) {
return makeFuture().via(executor);
}