std :: function нужен адрес для работы на vs2012? - PullRequest
0 голосов
/ 31 октября 2018

Я обнаружил это странное поведение при работе с 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

Что здесь происходит?

...