Рассмотрим этот простой класс:
template<class T>
class Foo{
public:
Foo(T const& val)
: _val(val) {}
template<class U>
Foo(Foo<U> const&){
static_assert(false,"Cannot convert from Foo<U> to Foo<T>.");
}
operator T&() { return _val; }
operator T const&() const{ return _val; }
private:
T _val;
};
Это позволяет неявную конструкцию из типа шаблона и неявное преобразование обратно в этот тип, простую оболочку.
Теперь я не хочу включать преобразование между несвязанными Foo
с, что было бы возможно из-за этих неявных конструкций / преобразований. Я мог бы сделать шаблонное копирование частным, но я не хотел бы выдавать полезную диагностику через static_assert
.
Проблема, как показано здесь на Ideone , заключается в том, что static_assert
дает сбой, даже когда я даже не пытаюсь скопировать тип! В Visual Studio я получаю желаемое поведение, хотя думаю, что это связано с тем, как VS анализирует шаблоны. Есть ли способ заставить это работать?