diff --git a/CMakeLists.txt b/CMakeLists.txt index 43d7f510..b8dd0fe5 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -105,7 +105,7 @@ if (CMAKE_COMPILER_IS_GNUCXX) message("Compiler : GNU Compiler (gcc)") set(GCC "TRUE") # set(COMBINED_FLAGS "-Wall -Wno-unused-function -Wno-sign-compare -pedantic -D_GNU_SOURCE -fms-extensions -Wno-deprecated") -# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g0") set(CMAKE_C_FLAGS_RELEASE "-O3 -g0") elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") diff --git a/tools.h b/tools.h index 3a6ce60d..ae57a3e4 100644 --- a/tools.h +++ b/tools.h @@ -59,7 +59,12 @@ #endif #if defined(USE_HASH_MAP) && !defined(_MSC_VER) - #if !defined(__GNUC__) + #if defined(__clang__) + // libc++ detected: _LIBCPP_VERSION + // libstdc++ detected: __GLIBCXX__ + #include + #include + #elif !defined(__GNUC__) #include #include using namespace stdext; @@ -69,10 +74,21 @@ using namespace __gnu_cxx; #define unordered_map hash_map #define unordered_set hash_set - #else + /* + NHANLT: resolve ambiguous reference + std::tr1 is Technical Report 1, a proposal of extensions for C++0X when waiting + for C++11 to get approved. Most of features (including + std::tr1::unordered_map/set) in Technical Report 1 had been merged into C++11. + C++11 had been fully implemented since GCC 4.8.1 -> we only need to use std::tr1 + in GCC older than 4.8.1 + */ + #elif GCC_VERSION < 40800 #include #include using namespace std::tr1; + #else + #include + #include #endif #else #include