以下代码适用于 gcc 甚至 VC11 Nov CTP,但无法使用 VC11 RTM 进行编译。
template<typename T>
struct A {
typedef typename T::Type BreakMe;
T x;
};
struct B { typedef int Type; };
template<typename T>
struct C {
static A<T> f(A<T> a) {
return A<decltype(a.x)>();
}
static auto g(A<T> a) -> A<decltype(a.x)> {
return A<decltype(a.x)>();
}
};
int main(int argc, char* argv[])
{
C<B>::f(A<B>());
C<B>::g(A<B>());
return 0;
}
- VC11 RTM:http ://rise4fun.com/Vcpp/9u2
- VC11 CTP:http ://rise4fun.com/Vcpp/6lS
VC11 RTM 似乎失败了 decltype 作为返回值中的模板参数传递:它认为“T=unknown”。请注意f
,尽管在其中使用 decltype ,但编译得很好。
这是 RTM 中的编译器错误吗?如果是这样,有没有办法解决它?