允许用户向std命名空间添加显式特化.但是,有一些模板我明确禁止专业化.
我可以和不可以使用哪些模板?
根据标准§20.10.2/ 1标题<type_traits>提要[meta.type.synop]:
1除非另有说明,否则为本子条款中定义的任何类模板添加特殊化的程序的行为是未定义的.
这个特定的条款与STL应该是可扩展的一般概念相矛盾,并且阻止我们扩展类型特征,如下例所示:
namespace std {
template< class T >
struct is_floating_point<std::complex<T>> : std::integral_constant
<
bool,
std::is_same<float, typename std::remove_cv<T>::type>::value ||
std::is_same<double, typename std::remove_cv<T>::type>::value ||
std::is_same<long double, typename std::remove_cv<T>::type>::value
> {};
}
Run Code Online (Sandbox Code Playgroud)
其中std::is_floating_point扩展为处理complex具有基础浮点类型的数字.