Проверяет ли std :: function () тип при компиляции кода в C ++ 11 в VS2010?

я использую std::function() в моем коде с C ++ 11 и VS2010. Вот мой код

function<string (string)> myfunc = 3;
myfunc(string());

Очевидно, что код неверный, для myfunc объект не инициализирован должным образом. myfunc объект должен оцениваться function<string (string)> объект, отличный от целочисленного типа. И при запуске к коду myfunc(string());, std::function объект бросает bad_function_call() и получает ошибку.

Однако, что смутило меня, почему C ++ 11 не проверяет тип во время компиляции? Это так странно, потому что отсутствие проверки типа сделает программистов легко запутать код случайно, пока не будет запущена соответствующая строка ошибки.

Поэтому я хочу спросить: std::function() проверить тип при компиляции кода в C ++ 11 в VS2010? Если нет, есть ли решение этой проблемы?

1

Решение

Похоже, это хак в реализации MS std::function чтобы разрешить следующее:

function<string (string)> myfunc = NULL;

Это кусок кода, который я мог найти в реализации MS <functional> заголовок:

#if defined(_NATIVE_NULLPTR_SUPPORTED) \
&& !defined(_DO_NOT_USE_NULLPTR_IN_STL)
function(int)
{   // construct empty function wrapper from null pointer
this->_Reset();
}
#endif /* defined(_NATIVE_NULLPTR_SUPPORTED) etc. */

Таким образом, похоже, что этот конструктор включен условно в зависимости от уровня стандартного соответствия, который хочет пользователь.

Однако в спецификации стандартной библиотеки C ++ 11 такого конструктора нет (см. Пункт 20.8.11.2.1).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]