Почему std :: move определяется в а не в <utility>? - PullRequest
0 голосов
/ 22 января 2020

cppreference.com и cplusplus.com говорят, что оно определено в <utility>. Но моя среда IDE отправляет меня в «C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ include \ type_traits». Не могу понять, почему.

1 Ответ

2 голосов
/ 22 января 2020

Стандарт только указывает, что #include <utility> дает вам доступ к std::move. Это не требует, чтобы это определение физически присутствовало в этом заголовочном файле. Стандартная библиотека может быть организована по своему усмотрению. Например, <utility> может состоять только из #include <utility_internal> (который затем содержит фактическую реализацию библиотеки) - ничто в стандарте не запрещает этого.

В реализации стандартной библиотеки Microsoft <utility> имеет #include <type_traits>. Таким образом, если вы сделаете #include <utility>, вы получите std::move. Это все, что вам нужно заботиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...