这很严谨,但在C++03中,程序似乎不能(不是特化)重载位于std命名空间中的模板函数:详见此处提到的内容和comp.lang.c++.moderated上的长篇讨论。
例如,以下代码是可以的:
但是这不是(如果我理解正确的话...):
这在C++11中仍然适用吗?此外,这是否也适用于模板类(如
编辑:是否有任何标准库实现的示例,使得后者在实践中会破坏事情?如果没有,是否有特定的原因不允许像上面第二种情况中的重载?(理论上可能会发生什么问题?)
例如,以下代码是可以的:
namespace std
{
template <>
void swap (Foo & f, Foo & g)
{
// ...
}
}
但是这不是(如果我理解正确的话...):
namespace std
{
template <typename T>
void swap (TempateFoo<T> & f, TempateFoo<T> & g)
{
// ...
}
}
这在C++11中仍然适用吗?此外,这是否也适用于模板类(如
std::hash
),还是只适用于模板函数?编辑:是否有任何标准库实现的示例,使得后者在实践中会破坏事情?如果没有,是否有特定的原因不允许像上面第二种情况中的重载?(理论上可能会发生什么问题?)
std
命名空间来处理除了模板特化之外的其他事情。 - Nawazstd
命名空间)。 - Nawaz