diff options
author | Brad King <brad.king@kitware.com> | 2005-04-15 12:59:30 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2005-04-15 12:59:30 (GMT) |
commit | 7f706ecc984abc81de62baa85892ecca81375bf7 (patch) | |
tree | fc93c6217ce3dae6cac0beef6f39e5e1c7c9fd47 /Source/kwsys | |
parent | d3a69766df78d4ee0186a592c05952280f043d3a (diff) | |
download | CMake-7f706ecc984abc81de62baa85892ecca81375bf7.zip CMake-7f706ecc984abc81de62baa85892ecca81375bf7.tar.gz CMake-7f706ecc984abc81de62baa85892ecca81375bf7.tar.bz2 |
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.
Diffstat (limited to 'Source/kwsys')
-rw-r--r-- | Source/kwsys/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Source/kwsys/Configure.hxx.in | 4 | ||||
-rw-r--r-- | Source/kwsys/hashtable.hxx.in | 8 | ||||
-rw-r--r-- | Source/kwsys/kwsysPlatformCxxTests.cxx | 14 |
4 files changed, 28 insertions, 0 deletions
diff --git a/Source/kwsys/CMakeLists.txt b/Source/kwsys/CMakeLists.txt index ff2a4bc..6423089 100644 --- a/Source/kwsys/CMakeLists.txt +++ b/Source/kwsys/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/Source/kwsys/Configure.hxx.in b/Source/kwsys/Configure.hxx.in index 1ea8b37..3cddb34 100644 --- a/Source/kwsys/Configure.hxx.in +++ b/Source/kwsys/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/Source/kwsys/hashtable.hxx.in b/Source/kwsys/hashtable.hxx.in index 80f633c..cb2f19f 100644 --- a/Source/kwsys/hashtable.hxx.in +++ b/Source/kwsys/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/Source/kwsys/kwsysPlatformCxxTests.cxx b/Source/kwsys/kwsysPlatformCxxTests.cxx index 74e83bd..9edbfc0 100644 --- a/Source/kwsys/kwsysPlatformCxxTests.cxx +++ b/Source/kwsys/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> |