From 52b7a4e1ffd3814b62cbf03fae050a7bb257cd8f Mon Sep 17 00:00:00 2001 From: Brad King <brad.king@kitware.com> Date: Fri, 15 Apr 2005 08:59:30 -0400 Subject: [PATCH] ENH: Added KWSYS_CXX_HAS_ARGUMENT_DEPENDENT_LOOKUP try-compile to KWSys. Needed to optionally bring hash table comparison operators into the global namespace when argument dependent lookup is not supported. --- CMakeLists.txt | 2 ++ Configure.hxx.in | 4 ++++ hashtable.hxx.in | 8 ++++++++ kwsysPlatformCxxTests.cxx | 14 ++++++++++++++ 4 files changed, 28 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3eee331..7113877 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -205,6 +205,8 @@ KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_MEMBER_TEMPLATES "Checking for member template support" DIRECT) KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_FULL_SPECIALIZATION "Checking for standard template specialization syntax" DIRECT) +KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_ARGUMENT_DEPENDENT_LOOKUP + "Checking whether argument dependent lookup is supported" DIRECT) IF(UNIX) KWSYS_PLATFORM_CXX_TEST(KWSYS_STAT_HAS_ST_MTIM diff --git a/Configure.hxx.in b/Configure.hxx.in index 512b689..7858239 100644 --- a/Configure.hxx.in +++ b/Configure.hxx.in @@ -76,6 +76,9 @@ /* Whether the compiler supports member templates. */ #define @KWSYS_NAMESPACE@_CXX_HAS_MEMBER_TEMPLATES @KWSYS_CXX_HAS_MEMBER_TEMPLATES@ +/* Whether the compiler supports argument dependent lookup. */ +#define @KWSYS_NAMESPACE@_CXX_HAS_ARGUMENT_DEPENDENT_LOOKUP @KWSYS_CXX_HAS_ARGUMENT_DEPENDENT_LOOKUP@ + /* Whether the compiler supports standard full specialization syntax. */ #define @KWSYS_NAMESPACE@_CXX_HAS_FULL_SPECIALIZATION @KWSYS_CXX_HAS_FULL_SPECIALIZATION@ @@ -128,6 +131,7 @@ # define KWSYS_CXX_DECL_TYPENAME @KWSYS_NAMESPACE@_CXX_DECL_TYPENAME # define KWSYS_STL_HAS_ALLOCATOR_REBIND @KWSYS_NAMESPACE@_STL_HAS_ALLOCATOR_REBIND # define KWSYS_STL_HAS_ALLOCATOR_MAX_SIZE_ARGUMENT @KWSYS_NAMESPACE@_STL_HAS_ALLOCATOR_MAX_SIZE_ARGUMENT +# define KWSYS_CXX_HAS_ARGUMENT_DEPENDENT_LOOKUP @KWSYS_NAMESPACE@_CXX_HAS_ARGUMENT_DEPENDENT_LOOKUP #endif #endif diff --git a/hashtable.hxx.in b/hashtable.hxx.in index 1d3285b..e1589ba 100644 --- a/hashtable.hxx.in +++ b/hashtable.hxx.in @@ -1087,6 +1087,14 @@ void hashtable<_Val,_Key,_HF,_Ex,_Eq,_All> } // namespace @KWSYS_NAMESPACE@ +// Normally the comparison operators should be found in the @KWSYS_NAMESPACE@ +// namespace by argument dependent lookup. For compilers that do not +// support it we must bring them into the global namespace now. +#if !@KWSYS_NAMESPACE@_CXX_HAS_ARGUMENT_DEPENDENT_LOOKUP +using @KWSYS_NAMESPACE@::operator==; +using @KWSYS_NAMESPACE@::operator!=; +#endif + #if defined(_MSC_VER) # pragma warning (pop) #endif diff --git a/kwsysPlatformCxxTests.cxx b/kwsysPlatformCxxTests.cxx index 74e83bd..9edbfc0 100644 --- a/kwsysPlatformCxxTests.cxx +++ b/kwsysPlatformCxxTests.cxx @@ -108,6 +108,20 @@ template <> struct A<int*> int main() { return A<int*>::f(); } #endif +#ifdef TEST_KWSYS_CXX_HAS_ARGUMENT_DEPENDENT_LOOKUP +namespace N +{ + class A {}; + int f(A*) { return 0; } +} +void f(void*); +int main() +{ + N::A* a = 0; + return f(a); +} +#endif + #ifdef TEST_KWSYS_STL_HAS_ALLOCATOR_REBIND #include <memory> template <class T, class Alloc> -- GitLab