687571a78b
Add pre-C++11 is_constructible wrappers for 3 arguments Summary: After rL319736 for D28253 (which fixes PR28929), gcc cannot compile <memory> anymore in pre-C+11 modes, complaining: In file included from /usr/include/c++/v1/memory:648:0, from test.cpp:1: /usr/include/c++/v1/memory: In static member function 'static std::__1::shared_ptr<_Tp> std::__1::shared_ptr<_Tp>::make_shared(_A0&, _A1&, _A2&)': /usr/include/c++/v1/memory:4365:5: error: wrong number of template arguments (4, should be at least 1) static_assert((is_constructible<_Tp, _A0, _A1, _A2>::value), "Can't construct object in make_shared" ); ^ In file included from /usr/include/c++/v1/memory:649:0, from test.cpp:1: /usr/include/c++/v1/type_traits:3198:29: note: provided for 'template<class _Tp, class _A0, class _A1> struct std::__1::is_constructible' struct _LIBCPP_TEMPLATE_VIS is_constructible ^~~~~~~~~~~~~~~~ In file included from /usr/include/c++/v1/memory:648:0, from test.cpp:1: /usr/include/c++/v1/memory:4365:5: error: template argument 1 is invalid static_assert((is_constructible<_Tp, _A0, _A1, _A2>::value), "Can't construct object in make_shared" ); ^ /usr/include/c++/v1/memory: In static member function 'static std::__1::shared_ptr<_Tp> std::__1::shared_ptr<_Tp>::allocate_shared(const _Alloc&, _A0&, _A1&, _A2&)': /usr/include/c++/v1/memory:4444:5: error: wrong number of template arguments (4, should be at least 1) static_assert((is_constructible<_Tp, _A0, _A1, _A2>::value), "Can't construct object in allocate_shared" ); ^ In file included from /usr/include/c++/v1/memory:649:0, from test.cpp:1: /usr/include/c++/v1/type_traits:3198:29: note: provided for 'template<class _Tp, class _A0, class _A1> struct std::__1::is_constructible' struct _LIBCPP_TEMPLATE_VIS is_constructible ^~~~~~~~~~~~~~~~ In file included from /usr/include/c++/v1/memory:648:0, from test.cpp:1: /usr/include/c++/v1/memory:4444:5: error: template argument 1 is invalid static_assert((is_constructible<_Tp, _A0, _A1, _A2>::value), "Can't construct object in allocate_shared" ); ^ This is also reported in https://bugs.freebsd.org/224946 (FreeBSD is apparently one of the very few projects that regularly builds programs against libc++ with gcc). The reason is that the static assertions are invoking is_constructible with three arguments, while gcc does not have the built-in is_constructible feature, and the pre-C++11 is_constructible wrappers in <type_traits> only provide up to two arguments. I have added additional wrappers for three arguments, modified the is_constructible entry point to take three arguments instead, and added a simple test to is_constructible.pass.cpp. Reviewers: EricWF, mclow.lists Reviewed By: EricWF Subscribers: krytarowski, cfe-commits, emaste Differential Revision: https://reviews.llvm.org/D41805 This should allow gcc to compile the libc++ 6.0.0 <memory> header without problems, in pre-C++11 mode. Reported by: jbeich PR: 224946 |
||
---|---|---|
.. | ||
amd | ||
apr | ||
apr-util | ||
atf | ||
binutils | ||
blacklist | ||
bmake | ||
bsnmp | ||
byacc | ||
bzip2 | ||
com_err | ||
compiler-rt | ||
cortex-strings | ||
dialog | ||
diff | ||
dma | ||
dtc | ||
ee | ||
elftoolchain | ||
expat | ||
file | ||
flex | ||
gcc | ||
gcclibs | ||
gdb | ||
gdtoa | ||
gperf | ||
hyperv/tools | ||
ipfilter | ||
jemalloc | ||
ldns | ||
ldns-host | ||
less | ||
libarchive | ||
libbegemot | ||
libc-pwcache | ||
libc-vis | ||
libc++ | ||
libcxxrt | ||
libdivsufsort | ||
libexecinfo | ||
libgnuregex | ||
libpcap | ||
libreadline | ||
libstdc++ | ||
libucl | ||
libxo | ||
llvm | ||
lua | ||
mdocml | ||
mknod | ||
mtree | ||
ncurses | ||
netbsd-tests | ||
netcat | ||
ngatm | ||
ntp | ||
nvi | ||
ofed | ||
one-true-awk | ||
openbsm | ||
openpam | ||
openresolv | ||
opie | ||
pam_modules/pam_passwdqc | ||
pf | ||
pjdfstest | ||
pnpinfo | ||
sendmail | ||
serf | ||
smbfs | ||
sqlite3 | ||
subversion | ||
tcp_wrappers | ||
tcpdump | ||
tcsh | ||
telnet | ||
tnftp | ||
top | ||
traceroute | ||
tzcode | ||
tzdata | ||
unbound | ||
unvis | ||
vis | ||
wpa | ||
xz | ||
zlib |