0

Разрешено ли предоставлять аргумент шаблона по умолчанию в объявлении друга?шаблон функции друга с аргументом шаблона по умолчанию

class A { 
    int value; 
public: 
    template<class T = int> friend void foo(); 
}; 

Visual Studio 2015, похоже, разрешает это. gcc отказывается от него. Я ничего не нашел на странице cppreference.

ответ

2

На C++ 11, правило, указывается в 14.1[temp.param]/9

Если объявление шаблона функции друг задает шаблонный аргумент по умолчанию, что заявление должно быть определение и должно быть только декларацией шаблон функции в блоке перевода.

До 14 июля, конечно, 14.1/9 сказал: «Шаблон-аргумент по умолчанию не указывается в объявлении шаблона друга».

(выше копируется в значительной степени дословно, по cppreference в Default template parameters, в настоящее время также упоминается в Template friends)

Таким образом, чтобы сделать вашу программу действительный C++, определить шаблон друга внутри класса, не просто объявить ,