Я пытаюсь написать потокобезопасную оболочку для std:: cout и подумал, что это хорошее время, чтобы узнать некоторые вариативные шаблоны.
Тогда, когда я подумал, что все правильно, я заметил, что это не работает с std:: endl.
Возьмите этот код:
template <typename... P>
void f(P...){}
int main()
{
f(1,2,3,std::endl);
}
Когда вы пытаетесь скомпилировать его, GCC жалуется очень глупо:
main.cpp:18:19: error: too many arguments to function 'void f(P ...) [with P = {}]'
Когда вы пытаетесь сделать это с помощью обычного шаблона, вы получаете
main.cpp:22:13: error: no matching function for call to 'f(<unresolved overloaded function type>)'
что действительно имеет смысл.
Это не большая проблема для меня, я могу сделать это каким-то другим способом, но мне очень хотелось бы знать, есть ли способ обойти это ограничение.