История изменений
Исправление Siborgium, (текущая версия) :
один чел написал «in order to call other existing tests like std::is_fundamental»
Если я правильно понял, он имел в виду, что было бы хорошо вызывать std::is_fundamental
перед std::is_class
(зачем? читаемости ошибок это не добавит). Непосредственно в deduction guide происходит следующее:
-
Сопоставление шаблонного параметра и выбор нужного гайда. Так как гайд вызывается всегда с 0, выбирается всегда второй гайд.
-
Подставление нужных аргументов в test_pre_ptr_convertible.
-
Возврат вычисленного test_pre_ptr_convertible типа.
Учитывая все вышесказанное, и что вычисленный тип нужен только для ::value
от него, проще было бы написать что-то типа
template <typename B, typename D>
constexpr bool test_is_base_of = decltype(
details::test_pre_ptr_convertible<B>(static_cast<D*>(nullptr))
)::value;
Исходная версия Siborgium, :
один чел написал «in order to call other existing tests like std::is_fundamental»
Если я правильно понял, он имел в виду, что было бы хорошо вызывать std::is_fundamental
перед std::is_class
. Непосредственно в deduction guide происходит следующее:
-
Сопоставление шаблонного параметра и выбор нужного гайда. Так как гайд вызывается всегда с 0, выбирается всегда второй гайд.
-
Подставление нужных аргументов в test_pre_ptr_convertible.
-
Возврат вычисленного test_pre_ptr_convertible типа.
Учитывая все вышесказанное, и что вычисленный тип нужен только для ::value
от него, проще было бы написать что-то типа
template <typename B, typename D>
constexpr bool test_is_base_of = decltype(
details::test_pre_ptr_convertible<B>(static_cast<D*>(nullptr))
)::value;