假设我有一个模板函数(例如,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
限定符的适当位置?