在命名空间周围使用decltype
时,我可以编写编译的代码,但该语句似乎在g ++ 4.9.1下没有任何影响,在clang下产生{{1} }
例如,以下所有内容都是在g ++下编译的,但程序集并没有显示为它们生成的任何代码。
error: unexpected namespace name 'std': expected expression
如果g ++允许这样做是对的吗?如果是这样,代码的优势是什么消失而不是导致编译时错误?
答案 0 :(得分:13)
不,这不合法。语法允许的两个 decltype-specifier 形式是(N3690,§7.1.6.2/ 1):
decltype说明符:
decltype
(表达)
decltype ( auto )
并且命名空间名称不是表达式。
我引用的段落来自C ++ 11的标准草案,因此decltype(auto)
不适用于C ++ 11。答案是一样的。