【发布时间】:2016-05-08 19:30:15
【问题描述】:
假设我有一个模板函数(例如,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限定符放在哪里合适?
【问题讨论】:
标签: c++ templates c++11 language-lawyer dependent-name