Я просто столкнулся с чем-то странным.Интересно, если это ошибка, и если нет, я надеюсь, что кто-то может объяснить проблему.
Моя проблема в том, что когда я создаю шаблонную функцию, которая принимает std::function
в качестве параметра по умолчанию, я могу создать только однушаблон создания этой функции, в противном случае я получаю ошибку.
Рассмотрим следующий код:
#include <functional>
template<bool B>
void wut(std::function<void()> f = []() {})
{
f();
}
int main() {
wut<false>(); // works
wut<false>(); // still works
wut<true>(); // error
return 0;
}
https://ideone.com/VlVcUv
При компиляции этого кода я получаю следующую ошибку:
{standard input}: Assembler messages:
{standard input}:28: Error: symbol `_ZNSt14_Function_base13_Base_managerIUlvE_E10_M_managerERSt9_Any_dataRKS3_St18_Manager_operation' is already defined
{standard input}:127: Error: symbol `_ZNSt17_Function_handlerIFbvEUlvE_E9_M_invokeERKSt9_Any_data' is already defined