我考虑std::is_pointer
在 C++11 中重载以产生 true for std::shared_ptr<T>
,因为后者的行为非常类似于T*
.
#include <type_traits>
namespace std {
template <typename T> struct is_pointer<shared_ptr<T>> : std::true_type {};
template <typename T> struct is_pointer<shared_ptr<T const>> : std::true_type {};
}
我想知道为什么这个重载还没有包含在标准实现中。有我忽略的陷阱吗?
作为替代方案,当然可以引入一个新特性is_shared_ptr<T>
。
实际上,我首先尝试了以下代码:
template <typename T>
struct is_pointer<shared_ptr<typename std::remove_cv<T>::type>>
: std::true_type
{};
由于 GCC 4.7 不能编译
error: template parameters not used in partial specialization:
error: ‘T’