101*_*010 7 c++ templates dependent-name language-lawyer c++11
假设我有一个模板函数(例如foo),它返回一个const依赖类型.用于限定返回类型的选项const是将const放在typename关键字的左侧:
template<typename T>
const typename T::bar
^^^^^
foo(T const& baz) {
...
}
Run Code Online (Sandbox Code Playgroud)
或在依赖类型的右侧:
template<typename T>
typename T::bar const
^^^^^
foo(T const& baz) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是如果我将const限定符放在typename关键字和依赖类型之间呢?
template<typename T>
typename const T::bar
^^^^^
foo(T const& baz) {
...
}
Run Code Online (Sandbox Code Playgroud)
如上所述,无法为GCC和CLANG编译,但令我惊讶的是VC++编译得很好.
const在这样的上下文中放置限定符的适当位置?