为什么make_pair和类模板参数演绎(CTAD)不能就生成哪种类型达成一致?
#include <iostream>
#include <functional>
#include <utility>
#include <typeinfo>
int main() {
int myInt = 5;
std::reference_wrapper<int> myIntRef = myInt;
auto myPair = std::make_pair(myInt, myIntRef);
std::pair My2ndPair(myInt, myIntRef);
std::cout << typeid(myPair).name() << '\n';
std::cout << typeid(My2ndPair).name() << '\n';
}输出:
St4pairIiRiE // std::pair<int, int&>
St4pairIiSt17reference_wrapperIiEE // std::pair<int, std::reference_wrapper<int> >更新:
为什么std::pair的扣减指南不包括std::reference_wrapper的指南,就像make_pair有重载一样?
发布于 2018-11-26 14:26:29
配对有特殊的规则
推导出的类型是
std::decay<T1>::type和std::decay<T2>::type(通常应用于通过值传递的函数参数的类型转换),除非应用std::reference_wrapper<X>导致某些类型的X**,的,在这种情况下,推导的类型是**X&.。
https://stackoverflow.com/questions/53483124
复制相似问题