Нет необходимости использовать enable_if
, если вам нужно различить guish между Foo<false>
и Foo<true>
. Должно работать следующее:
template <bool B>
class Foo
{
public:
Foo(const Foo<true>& other);
Foo(const Foo<false>& other);
// ...
};
https://godbolt.org/z/_9NNhR
После комментария, чтобы запретить преобразование из false в true, следующий код будет работать :
template <bool B>
class Foo
{
public:
template<bool Other>
Foo(const Foo<Other>& other) {}
Foo() {}
};
template <>
template <>
Foo<true>::Foo(const Foo<false>&) = delete;
https://godbolt.org/z/NjghXK
Если мы хотим заменить копию ctor и избежать преобразования из false в true:
template <bool B>
class Foo
{
public:
Foo(const Foo<true>& other) {
std::cout << true << " set to " << B << std::endl;
}
Foo(const Foo<false>& other) {
std::cout << false << " set to " << B << std::endl;
}
Foo() {}
};
template <>
Foo<true>::Foo(const Foo<false>&) = delete;
https://godbolt.org/z/zt8VMb