Набрел на забавное поведение при попытке скормить std::function функции, отличающиеся соглашениями об вызове: (min-gw 4.7.0)
#include <functional>
void __stdcall fn1(){
}
void __cdecl fn2(){
}
int main()
{
std::function< void()> fz1=std::bind(&fn1);
std::function< void()> fz2=std::bind(&fn2);
}
Вылетает град ошибок.
И вот более минимальный код:
void __stdcall fn1(){
}
void __cdecl fn2(){
}
struct ICall{
};
template<class F> struct CCall:ICall{
};
template<class F> ICall* reg(F f){
return new CCall<F>();
};
int main()
{
reg(&fn1);
reg(&fn2);
}
С ошибкой
Error: symbol `__Z3regIPFvvEEP5ICallT_' is already defined|
||=== Build finished: 1 errors, 0 warnings ===|