C++ 不同意在嵌套类中使用类型别名
clang++和g++对以下代码的有效性存在分歧:C++ 不同意在嵌套类中使用类型别名,c++,templates,portability,type-alias,C++,Templates,Portability,Type Alias,clang++和g++对以下代码的有效性存在分歧: template<typename T> struct thing { struct nested { typename thing::type num; }; using type = int; }; 模板 结构物{ 嵌套结构{ typename事物::type num; }; 使用type=int; }; g++(4.8及以上版本)的所有版本都编译了此文件,而clang(3.0及以上版
template<typename T>
struct thing {
struct nested {
typename thing::type num;
};
using type = int;
};
模板
结构物{
嵌套结构{
typename事物::type num;
};
使用type=int;
};
g++(4.8及以上版本)的所有版本都编译了此文件,而clang(3.0及以上版本)的所有版本都抱怨未定义thing::type
显然,如果东西不是一个模板,两个编译器都不会接受,但谁是正确的,为什么
提前谢谢。太棒了。我猜如果模板对象被实例化,事情就会改变。(我用C++17在wandbox.org上对clang HEAD和gcc HEAD进行了测试。我添加了一个成员T值;
,我可以初始化和输出)。但是,gcc仍然会启动和运行-clang不会编译。是的,对吗?很奇怪。在编译器的几个主要修订版本中,对于简单代码的有效性存在明显的分歧,这是很少见的。我假设clang在这里必须“更”正确,但我想知道这是否是标准规定“无需诊断”的情况之一,因此gcc在技术上不是错误的。