Код:
#ifdef _MSC_VER
# pragma warning( disable: 4480 ) // enum base as "nonstandard extension"
#endif
enum ShouldBeFine: char { hola };
enum Choice { a, b, c };
template< Choice c > struct Traits;
template<> struct Traits<a> { typedef char Type; };
template<> struct Traits<b> { typedef wchar_t Type; };
template<> struct Traits<c> { typedef long Type; };
template< Choice c >
struct Blah
{
enum X: typename Traits<c>::Type {};
};
int main()
{}
Только после Herculean усилия , чтобы подать отчет об ошибке в Microsoft, мне пришло в голову, что, возможно, Visual C ++ прав, отказавшись от него, и g ++, который компилирует выше хорошо, может быть не так?
РЕДАКТИРОВАТЬ Подробности: код не может быть скомпилирован с Visual C ++ 10.0 и с предварительным просмотром Visual C ++ 11.0. Эти компиляторы выдают лавинообразную ошибку, начиная с предполагаемой синтаксической ошибки. Код прекрасно компилируется с MinGW g ++ 4.4.1. Dani сообщает, что он отлично работает с CLang. К сожалению, Comeau Online не поддерживает эту языковую функцию, поэтому ее нельзя решить так, как мы это часто делали для C ++ 98, просто передайте код Comeau.