LINUX.ORG.RU

История изменений

Исправление Siborgium, (текущая версия) :

один чел написал «in order to call other existing tests like std::is_fundamental»

Если я правильно понял, он имел в виду, что было бы хорошо вызывать std::is_fundamental перед std::is_class (зачем? читаемости ошибок это не добавит). Непосредственно в deduction guide происходит следующее:

  1. Сопоставление шаблонного параметра и выбор нужного гайда. Так как гайд вызывается всегда с 0, выбирается всегда второй гайд.

  2. Подставление нужных аргументов в test_pre_ptr_convertible.

  3. Возврат вычисленного 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 происходит следующее:

  1. Сопоставление шаблонного параметра и выбор нужного гайда. Так как гайд вызывается всегда с 0, выбирается всегда второй гайд.

  2. Подставление нужных аргументов в test_pre_ptr_convertible.

  3. Возврат вычисленного 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;