Подтвердить что ты не робот

Что означает "typename =" в параметрах шаблона?

Я видел это выражение на стр. 189 книги "Эффективный современный С++":

    template<typename T,
             typename = typename std::enable_if<condition>::type>
    explicit Person(T&& n);

Мне просто интересно, что означает часть "typename =". Он определенно выглядит как аргумент по умолчанию для параметра шаблона. Но вам не нужно что-то вроде "typename some_name = ..." в аргументе по умолчанию? Нет имени для второго аргумента шаблона, и я не вижу в этом случае аргумент второго шаблона.

P.S. Когда я ищу в Google (или любой другой поисковой системе) для ответа, знак равенства всегда отбрасывается, и это просто делает поиск ответа практически невозможным...

4b9b3361

Ответ 1

Это необязательный параметр шаблона без имени и значения по умолчанию.
Он использовал условие enable_if; он создаст ошибку компилятора, если условие не выполнено.

Вы можете использовать точно такой же синтаксис для обычных аргументов метода.