When using C++11 or later, or when using libc++ with any C++ standard, don't use the tr1 namespace. Inspired by: https://github.com/moses-smt/giza-pp/issues/1 http://catherinegasnier.blogspot.com/2014/04/install-giza-107-on-mac-osx-1092.html Sent upstream: https://github.com/moses-smt/giza-pp/pull/6 --- GIZA++-v2/mystl.h.orig 2012-04-01 23:15:50.000000000 -0500 +++ GIZA++-v2/mystl.h 2019-11-02 04:10:21.000000000 -0500 @@ -25,9 +25,13 @@ #include using __gnu_cxx::hash_map; #else +#if __cplusplus < 201103L && !defined(_LIBCPP_VERSION) #include -#define hash_map unordered_map using namespace std::tr1; +#else +#include +#endif +#define hash_map unordered_map #endif #include --- mkcls-v2/myleda.h.orig 2012-04-01 23:22:35.000000000 -0500 +++ mkcls-v2/myleda.h 2019-11-02 04:09:40.000000000 -0500 @@ -27,7 +27,11 @@ #define myleda_HEADER_defined #include #include +#if __cplusplus < 201103L && !defined(_LIBCPP_VERSION) #include +#else +#include +#endif #include "myassert.h" #include "FixedArray.h" using namespace std; @@ -110,7 +114,11 @@ }; inline int Hash(int value) { return value; } +#if __cplusplus < 201103L && !defined(_LIBCPP_VERSION) #define MY_HASH_BASE std::tr1::unordered_map +#else +#define MY_HASH_BASE unordered_map +#endif template class leda_h_array : public MY_HASH_BASE --- mkcls-v2/mystl.h.orig 2012-04-01 23:44:54.000000000 -0500 +++ mkcls-v2/mystl.h 2019-11-02 04:09:19.000000000 -0500 @@ -27,13 +27,19 @@ #define MY_STL_H_DEFINED #include #include +#if __cplusplus < 201103L && !defined(_LIBCPP_VERSION) #include +#else +#include +#endif #include using namespace std; namespace std { +#if __cplusplus < 201103L && !defined(_LIBCPP_VERSION) namespace tr1 { +#endif template struct hash > { static inline void hash_combine(std::size_t & seed, const T & v) { @@ -48,7 +54,9 @@ return h; } }; +#if __cplusplus < 201103L && !defined(_LIBCPP_VERSION) } +#endif } #define over_string(a,i) for(unsigned int i=0;i