[libcxx] r234886 - Qualify an internal call in is_assignable to prevent ADL lookup, which would 'complete' an type definition unnecessarily. Thanks to Richard Smith for the report.
Marshall Clow
mclow.lists at gmail.com
Tue Apr 14 06:53:54 PDT 2015
Author: marshall
Date: Tue Apr 14 08:53:53 2015
New Revision: 234886
URL: http://llvm.org/viewvc/llvm-project?rev=234886&view=rev
Log:
Qualify an internal call in is_assignable to prevent ADL lookup, which would 'complete' an type definition unnecessarily. Thanks to Richard Smith for the report.
Modified:
libcxx/trunk/include/type_traits
libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp
Modified: libcxx/trunk/include/type_traits
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/type_traits?rev=234886&r1=234885&r2=234886&view=diff
==============================================================================
--- libcxx/trunk/include/type_traits (original)
+++ libcxx/trunk/include/type_traits Tue Apr 14 08:53:53 2015
@@ -1533,7 +1533,7 @@ template <class _Tp, class _Arg, bool =
struct __is_assignable_imp
: public common_type
<
- decltype(__is_assignable_test(declval<_Tp>(), declval<_Arg>()))
+ decltype(_VSTD::__is_assignable_test(declval<_Tp>(), declval<_Arg>()))
>::type {};
template <class _Tp, class _Arg>
Modified: libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp?rev=234886&r1=234885&r2=234886&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp Tue Apr 14 08:53:53 2015
@@ -49,6 +49,9 @@ struct E
};
#endif
+template <typename T>
+struct X { T t; };
+
int main()
{
test_is_assignable<int&, int&> ();
@@ -67,4 +70,7 @@ int main()
test_is_not_assignable<void, const void> ();
test_is_not_assignable<const void, const void> ();
test_is_not_assignable<int(), int> ();
+
+// pointer to incomplete template type
+ test_is_assignable<X<D>*&, X<D>*> ();
}
More information about the cfe-commits
mailing list