![](/img/trans.png)
[英]What does pointer_traits provide for types that are neither X<A, T…> nor provide a member typedef element_type?
[英]Why is pointer_traits not defined for “T* const”?
正如在http://en.cppreference.com/w/cpp/memory/pointer_traits和相關網站上看到的那樣(也是通過boost侵入的boost實現), pointer_traits
並不專門用於T*const
。 這是為什么?
雖然這不符合強烈的動機反對指定應該存在針對T* const
的pointer_traits<>
的特化,但我想解釋為什么它不包括在內的原因可能是pointer_traits<>
主要用於在上下文中使用發生模板參數推導(特別是類型推導)。
由於類型推導忽略了頂級cv資格,因此可能認為T* const
或T* volatile
或T* const volatile
是不必要的:
#include <type_traits>
template<typename T>
void foo(T)
{
static_assert(std::is_same<T, int*>::value, "Error"); // Does not fire!
// ^^^^
}
int main()
{
int x = 0;
int* const p = &x;
foo(p);
}
當然,這並不意味着在這種情況下對T* cv
進行專業化會造成傷害,我只是想提供一個可能解釋為什么缺少這些專業化的原因。
同樣,沒有為T* cv
提供iterator_traits<>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.