Код: Выделить всё
#include
template struct is_complex : std::false_type {};
template struct is_complex : std::true_type {};
template
struct Foo {
void foo(typename T::value_type t)
requires (is_complex::value) {
}
};
Эта функция должна быть доступна только Когда t действительно std :: complex .
Я думал, что могу использовать Typename t :: value_type в качестве типа параметра, так как STD: : Комплекс имеет typedef value_type . Кроме того, я думал, что использование требуется здесь, чтобы позволить T, чтобы заменить в этой функции в случае, если t не был STD :: Complex. Глупый я.
Проблема в том, что всякий раз, когда я создаю foo код ломается, поскольку фундаментальные данные не имеют :: value_type .
Код: Выделить всё
int main() {
Foo obj; // Breaks the code.
//obj.foo(4); // Function shouldn't be considered in overload resolution ideally...
Foo obj2; // Works
obj2.foo(4); // Works as expected
}
Подробнее здесь: https://stackoverflow.com/questions/746 ... completely
Мобильная версия