我正在使用coliru。
命令行是:
g++ -std=c++11 -O2 main.cpp && ./a.out
clang++ -std=c++11 -O2 main.cpp && ./a.out
以下代码在 g++ 中编译得很好,但在 clang++ 中编译得不好。
template <typename T, typename... U>
A& operator ()(T a, U... b)
{
struct Inner {
operator decltype(T(U...)) const {
return a(b...);
}
} inner;
return *this;
}
main.cpp:17:37:错误:'U' 没有引用值
operator decltype(T(U...)) const { ^
main.cpp:13:43: 注意:在这里声明
template <typename T, typename... U> ^
产生 1 个错误。
我现在得到的错误是:
main.cpp:18:41: error: reference to local variable 'a' declared in enclosing function 'operator()'
我的课看起来像这样:
template <typename R>
class A {
R value = R();
public:
A() { }
~A() { }
template <typename T, typename... U>
A& operator ()(T a, U... b)
{
struct Inner {
operator decltype(std::declval<T>()(std::declval<U>()...))() const {
// some code here to return a(b...)
}
} inner;
value += inner;
return *this;
}
R val() {
return value;
}
};