xml*_*lmx 4 c++ templates language-lawyer
#include <string>
template<typename T, typename C, typename CR>
void f()
{
typename T::size_type* p1{}; // ok
typename CR::size_type* p2{}; // error
typename C::size_type* p3{}; // Does the C++ standard allow this?
}
int main()
{
f<std::string, const std::string, const std::string&>();
}
Run Code Online (Sandbox Code Playgroud)
和 取其嵌套类型时没有区别吗const T ? T
const用和/或限定的类型volatile是非限定类型的“版本”(标准中的[basic.type.qualifier],6.3.8,第 1 段) - 即使它不完全相同。这与指针或引用不同,指针或引用在引入时形成与其指向或引用的类型完全不同的类型(标准 9.3.3.1 和 9.3 的条款[dcl.ref]和[dcl.ptr]) 。 3.2 第 1 段)。
还值得一提的是,类范围类型不会获得 -限定,因为您从类型的版本const中获取它们-例如,与 完全相同的类型- 但与不同。conststd::vector<int>::iteratorstd::add_const_t<std::vector<int>>::iteratorstd::vector<int>::const_iterator