假设我有一个模板函数(例如,foo),它返回一个const依赖类型.将返回类型限定为const的选项是将const放在typename关键字的左侧:
template<typename T> const typename T::bar ^^^^^ foo(T const& baz) { ... }
或在依赖类型的右侧:
template<typename T> typename T::bar const ^^^^^ foo(T const& baz) { ... }
但是如果我将const限定符放在typename关键字和依赖类型之间呢?
template<typename T> typename const T::bar ^^^^^ foo(T const& baz) { ... }
正如预期的那样,上面没有为GCC和CLANG编译,但令我惊讶的是VC编译得很好.
问:
>这是VC扩展吗?
> C标准是否说明将const限定符放在这样的上下文中的适当位置?
解决方法
Does the C++ standard says anything about where is the appropriate
place to putconst
qualifier in such a context?
是. typename出现在typename-specifier,whose production is中
typename
nested-name-specifier identifier
typename
nested-name-specifiertemplate
opt simple-template-id
换句话说,必须直接使用嵌套名称说明符. const是不允许的.