decltype(std)是否合法,是否有任何目的?

时间:2014-09-30 15:26:35

标签: c++ c++11 g++ decltype

在命名空间周围使用decltype时,我可以编写编译的代码,但该语句似乎在g ++ 4.9.1下没有任何影响,在clang下产生{{1} }

例如,以下所有内容都是在g ++下编译的,但程序集并没有显示为它们生成的任何代码。

error: unexpected namespace name 'std': expected expression

如果g ++允许这样做是对的吗?如果是这样,代码的优势是什么消失而不是导致编译时错误?

1 个答案:

答案 0 :(得分:13)

不,这不合法。语法允许的两个 decltype-specifier 形式是(N3690,§7.1.6.2/ 1):

  

decltype说明符:
      decltype表达
      decltype ( auto )

并且命名空间名称不是表达式。

我引用的段落来自C ++ 11的标准草案,因此decltype(auto)不适用于C ++ 11。答案是一样的。