gpt4 book ai didi

c++ - 当 Visual C++ 拒绝此基于模板 -"dependent"的枚举时,它是否正确?

转载 作者:行者123 更新时间:2023-11-30 04:31:53 24 4
gpt4 key购买 nike

代码:

#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 effort 之后提交 bug report对于 Microsoft,我是否认为 Visual C++ 拒绝它是正确的,而编译上述内容的 g++ 可能是错误的?

编辑 详细信息:代码无法使用 Visual C++ 10.0 和 Visual C++ 11.0 预览版进行编译。这些编译器从一个所谓的语法错误开始吐出一些杂乱无章的错误雪崩。使用 MinGW g++ 4.4.1 可以很好地编译代码。 Dani报告说它用 CLang 编译得很好。不幸的是,Comeau Online 不支持这个语言特性,所以不能像我们经常为 C++98 那样决定,把代码给 Comeau。

最佳答案

如果我正确地阅读了语法,那么你是正确的,因为这应该编译。 enum-base: type-specifier-seq , 和 type-specifier-seq似乎包含几乎所有你能想到的类型名称,包括 typename Traits<c>::Type .所有三个特化的结果都是 Type是完整的,这也是枚举基所需要的。所以这对我来说看起来很干净。

关于c++ - 当 Visual C++ 拒绝此基于模板 -"dependent"的枚举时,它是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com