假设我有一个模板函数(例如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 ++编译得很好。
const
限定符放在这样的上下文中的适当位置?答案 0 :(得分:11)
C ++标准是否说明了适当的地方 在这样的背景下放置
for...of
限定符的位置?
是。 const
出现在 typename-specifier ,whose production is
typename
嵌套名称说明符 标识符
typename
嵌套名称说明符typename
opt simple-template-id
换句话说,必须直接使用嵌套名称说明符。 <{1}}是不允许的。