Я думал, что следующий код скомпилируется, потому что конфликтующие перегрузки удалены. Но компилятор (G CC) говорит: void Foo<X>::bar(Xd) const' cannot be overloaded
. Есть ли простой способ исправить это, или я должен был бы специализировать весь Foo
?
#include <type_traits>
struct A{};
template<typename X>
struct Foo {
template<typename Xd=X, typename = std::enable_if_t<std::is_arithmetic<Xd>::value>>
void bar() const {
}
template<typename Xd=X, typename = std::enable_if_t<std::is_same<Xd,A>::value>>
void bar() const {
}
};
int main(){}