c – 从模板函数返回的const依赖名称,const在哪里?

前端之家收集整理的这篇文章主要介绍了c – 从模板函数返回的const依赖名称,const在哪里?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个模板函数(例如,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 put const qualifier in such a context?

是. typename出现在typename-specifier,whose production is

typename nested-name-specifier identifier
typename nested-name-specifier templateopt simple-template-id

换句话说,必须直接使用嵌套名称说明符. const是不允许的.

原文链接:https://www.f2er.com/c/119835.html

猜你在找的C&C++相关文章