Вопрос о SFINAE шаблона класса и шаблона функции

Пример для продолжения:

number = 0

for number in range(10):
   number = number + 1

   if number == 5:
      continue    # continue here

   print('Number is ' + str(number))

print('Out of loop')

Выход:

Number is 1
Number is 2
Number is 3
Number is 4
Number is 6 # Note: 5 is skipped!!
Number is 7
Number is 8
Number is 9
Number is 10
Out of loop
1
задан HolyBlackCat 26 February 2019 в 12:27
поделиться

1 ответ

Причина, по которой следующие две строки терпят неудачу, заключается в том, что нет определения в ContainerHandler, которое сделало бы успешной реализацию шаблона с этими аргументами шаблона.

ContainerHandler<int> handler1; //compile error
ContainerHandler<int, int> handler2; //compile error

Если вы предоставите определение для шаблона, например, как это:

template<typename T , typename = int>
struct ContainerHandler {};

Компиляция будет успешной. См. демо здесь .

РЕДАКТИРОВАТЬ:

Нет. Я ожидаю получить ошибку компиляции при вызове функции шаблона "container_handler ();" (в первой части кодов).

Параметр int_t в container_handler имеет значение по умолчанию, поэтому он компилируется container_handler<int>();. Отсутствие значения по умолчанию вызовет сбой компиляции.
См. демо здесь .

0
ответ дан P.W 26 February 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: