Size: a a a

2020 June 21

AB

Artöm Bakri Al-Sarmi... in pro.cxx
То правило не ограничивает список аргументов шаблона
источник

NP

Nikita Provotorov in pro.cxx
Artöm Bakri Al-Sarmini
Список так и будет 1 аргумент у обоих. Но всегда один из гайдов будет отброшен за счет фейла инстанцирования
А, это имеется в виду в дополнение к std::conditional?
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Нет, это решение без conditional, с двумя гайдами
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
С conditional будет один гайд
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Не уверен, что из этого лучше
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
А хотя я не уверен, что решение с conditional рабочее. Проблема в том, чтобы отложить вычисление value_type
источник

NP

Nikita Provotorov in pro.cxx
Artöm Bakri Al-Sarmini
Нет, это решение без conditional, с двумя гайдами
тогда до sfinae ведь не дойдет даже, компилятор увидит два одинаковых конструктора и наругает
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Они не одинаковые
источник

NP

Nikita Provotorov in pro.cxx
Artöm Bakri Al-Sarmini
Они не одинаковые
ну вообще я пытался уже провернуть такое через шаблонный параметр std::enable_if_t<...>* = nullptr
источник

NP

Nikita Provotorov in pro.cxx
не прокатило
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
template <typename T, enable_if_t<has_value_type_v<T>, int> = 0>
Foo(T) -> Foo<typename T::value_type>;

template <typename T, enable_if_t<!has_value_type_v<decay_t<T>, int> = 0>
Foo(T&&) -> чтототам_с_invoke;
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Здесь важен ! во втором шаблоне
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
(добавил _t)
источник

NP

Nikita Provotorov in pro.cxx
Artöm Bakri Al-Sarmini
template <typename T, enable_if_t<has_value_type_v<T>, int> = 0>
Foo(T) -> Foo<typename T::value_type>;

template <typename T, enable_if_t<!has_value_type_v<decay_t<T>, int> = 0>
Foo(T&&) -> чтототам_с_invoke;
Не, не катит
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Какую ошибку пишет?
источник

NP

Nikita Provotorov in pro.cxx
источник

NP

Nikita Provotorov in pro.cxx
Стоп, я же забыл конструкторы в Foo напистаь
источник

NP

Nikita Provotorov in pro.cxx
впрочем, ничего не изменилось
источник

NP

Nikita Provotorov in pro.cxx
я знаю, что описанным тобою способом можно сфинаить конструкторы, но для правил видимо такое не катит
источник

NP

Nikita Provotorov in pro.cxx
но вот conditional выглядит многообещающе
источник