У меня есть шаблонный класс, который может (и иногда должен) принимать тип const
, но есть метод, который возвращает новый экземпляр класса того же типа, но должен быть явно неконстантным.Например, следующий код не может скомпилировать
template<class T> class SomeClass {
public:
T val;
SomeClass(T val) : val(val) {}
SomeClass<T> other() {
return SomeClass<T>(val);
}
};
int main() {
SomeClass<const int> x(5);
SomeClass<int> y = x.other();
return 0;
}
, потому что, хотя во время конструктора есть копия val, он копирует в тот же тип - const int
.Точно так же, как вы можете различать T
и const T
в шаблоне, есть ли способ различать T
и "nonconst T
"?