LINUX.ORG.RU

Как работает std::enable_if без явного указания типа?


0

2

Вот в документации type_traits специализируется булевым true, и типом T, который через typedef выглядывает наружу. И тут же, в примере, рядом с

typename std::enable_if<std::is_integral<T>::value,bool>::type
находится
typename std::enable_if<std::is_integral<T>::value>::type>
без явного указания типа. Как это работает? Откуда выводится (выдумывается) тип?

Ответ на: комментарий от one_more_hokum

Так это, как я понимаю, при Cond == false.

Это объявление шаблона, совмещённое с определением. Все дефолтные значения параметров, указанные в объявлении, действуют везде.

const86 ★★★★★
()
Ответ на: комментарий от const86

Так в простейшем примере

#include <type_traits>

template <typename T>
struct TestEi
{
    typedef typename std::enable_if<std::is_integral<T>::value>::type type;
};

int main()
{
    TestEi<double> testEiNoIntegral;
    return 0;
}
конпелятор говорит, что в enable_if типа type не обнаружено: error: no type named 'type' in 'struct std::enable_if' .

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

Всё, спасибо

static_assert(std::is_same<TestEi<int>::type, void>::value, "Not a void");
сказал, что и как.

one_more_hokum ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.