[libcxx] r269991 - Optimize declval for compile times. Patch from Eric Niebler.

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Wed May 18 15:23:46 PDT 2016


Author: ericwf
Date: Wed May 18 17:23:46 2016
New Revision: 269991

URL: http://llvm.org/viewvc/llvm-project?rev=269991&view=rev
Log:
Optimize declval for compile times. Patch from Eric Niebler.

This patch implements the C++11 version of declval without requiring a template
instantiation.

See PR27798 for more information. https://llvm.org/bugs/show_bug.cgi?id=27798

Modified:
    libcxx/trunk/include/type_traits

Modified: libcxx/trunk/include/type_traits
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/type_traits?rev=269991&r1=269990&r2=269991&view=diff
==============================================================================
--- libcxx/trunk/include/type_traits (original)
+++ libcxx/trunk/include/type_traits Wed May 18 17:23:46 2016
@@ -1095,8 +1095,11 @@ template <class _Tp> using add_rvalue_re
 
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
+template <class _Tp> _Tp&& __declval(int);
+template <class _Tp> _Tp   __declval(long);
+
 template <class _Tp>
-typename add_rvalue_reference<_Tp>::type
+decltype(_VSTD::__declval<_Tp>(0))
 declval() _NOEXCEPT;
 
 #else  // _LIBCPP_HAS_NO_RVALUE_REFERENCES




More information about the cfe-commits mailing list