Пожалуйста, посмотрите, что я пытаюсь сделать:
#include <iostream>
namespace first
{
template <class T>
class myclass
{
T t;
public:
void who_are_you() const
{ std::cout << "first::myclass"; }
};
}
namespace second
{
using first::myclass;
template <>
class myclass <int>
{
int i, j;
public:
void who_are_you() const
{ std::cout << "second::myclass"; }
};
}
Это запрещено. Не могли бы вы прояснить , почему не может быть специализациям в разных пространствах имен и каковы доступные решения? Кроме того, это что-то фиксированное в С++ 0x?
Это позволило бы мне, например, специализировать std::max
, std::swap
, std::numeric_limits
и т.д., не прибегая к поведению undefined, добавив что-то в ::std::
?
@AndreyT Вот как я, хотя я бы использовал его:
// my_integer is a class
std::numeric_limits<my_integer>::max(); // specialized std::numeric_limits for my_integer
Можно ли это сделать?