Я обнаружил это странное поведение при работе с std :: function.
Приведенный ниже код компилируется без предупреждений на VS2012, но при выполнении происходит нарушение доступа к памяти в функции type_traits forward
.
typedef std::function<void()> Func;
void defaultFunc() { /* no-op */ }
int main(int argc, const char** argv)
{
Func f = argc == 0 ? Func() : defaultFunc; // crash
return 0;
}
Я дважды проверил gnu g ++ 4.9.2, которая не воспроизводила проблему.
Если я добавляю амперсанд к значению по умолчанию, все работает:
Func f = argc == 0 ? Func() : &defaultFunc; // works
Если я удаляю троичное условие, оно работает как положено.
Func f = defaultFunc; // works
Что здесь происходит?