[cfe-dev] Explicit template arguments in std::make_pair

Krzysztof Parzyszek via cfe-dev cfe-dev at lists.llvm.org
Thu Nov 16 09:20:35 PST 2017


Hi,

This simple program fails to compile with -std=c++11, but compiles ok 
with c++03. This seems consistent between libc++/libstdc++. Is this due 
to a change in the standard? What is the reason behind it?



#include <utility>

std::pair<int,unsigned> good(unsigned L) {
   return std::make_pair(0, L);
}

std::pair<int,unsigned> bad(unsigned L) {
   return std::make_pair<int,unsigned>(0, L);
}


clang++ -c -std=c++11 pp.cpp -stdlib=libc++
pp.cpp:8:10: error: no matching function for call to 'make_pair'
   return std::make_pair<int,unsigned>(0, L);
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/w/c/org/bin/../include/c++/v1/utility:639:1: note: candidate function not
       viable: no known conversion from 'unsigned int' to 'unsigned int 
&&' for
       2nd argument
make_pair(_T1&& __t1, _T2&& __t2)
^
1 error generated.


-Krzysztof

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation


More information about the cfe-dev mailing list