Следующий код работает на gcc и даже VC11 Nov CTP, но не скомпилирован с RTM VC11.VS2012 - Decltype в качестве параметра шаблона в возвращаемом типе возврата
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 = неизвестно ». Обратите внимание, что f
компилируется отлично, несмотря на то, что внутри него используется decltype.
Является ли это ошибкой компилятора в RTM? И если да, есть ли способ обойти это?