[cfe-dev] clang fails to compile gcc 4.8's <unordered_map>

Nathan Ridge zeratul976 at hotmail.com
Wed May 30 20:59:59 PDT 2012


Hello,

Clang fails to compile GCC 4.8.0's <unordered_map> with the following errors:

gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:806:8: error: expected unqualified-id
        using __is_convertible = std::is_convertible<_Pair, value_type>;
              ^
gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:809:49: error: expected '('
        using _IFconv = std::enable_if<__is_convertible<_Pair>::value>;
                                                       ^
gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:809:50: error: '_Pair' does not refer to a value
        using _IFconv = std::enable_if<__is_convertible<_Pair>::value>;
                                                        ^
gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:808:25: note: declared here
      template<typename _Pair>
                        ^
gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:809:58: error: expected ';' after alias declaration
        using _IFconv = std::enable_if<__is_convertible<_Pair>::value>;
                                                                ^
gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:812:28: error: expected a qualified name after
      'typename'
        using _IFconvp = typename _IFconv<_Pair>::type;
                                  ^
gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:812:27: error: expected ';' after alias declaration
        using _IFconvp = typename _IFconv<_Pair>::type;
                                 ^
gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:814:43: error: unknown type name '_IFconvp'
      template<typename _Pair, typename = _IFconvp<_Pair>>
                                          ^
gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:814:51: error: expected ',' or '>' in
      template-parameter-list
      template<typename _Pair, typename = _IFconvp<_Pair>>
                                                  ^
gcc-4.8/include/c++/4.8.0/bits/hashtable_policy.h:814:58: error: expected member name or ';' after
      declaration specifiers
      template<typename _Pair, typename = _IFconvp<_Pair>>
                                                         ^

The problem is that GCC uses the following alias template as class scope:

template<typename _Pair>
using __is_convertible = std::is_convertible<_Pair, value_type>;

but __is_convertible, I am guessing, is a compiler intrinsic in clang.

Is either gcc or clang doing something wrong, or is it just a clash of implementations?
What can be done to resolve this?

Thanks,
Nate
 		 	   		  



More information about the cfe-dev mailing list