Eos: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?

Created on 13 Mar 2018  路  3Comments  路  Source: EOSIO/eos

no template named 'enable_if_t' in namespace 'std'; did you mean
'enable_if'?
template ~^~~
enable_if
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1766:12: note:
'enable_if' declared here
struct enable_if
^
how do i fix this?

Most helpful comment

Upgraded to g++-6 and the issue is resolved.

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-6

All 3 comments

What linux distribution? It looks like your compiler is using a very old stdc++ lib

I have the same problem...

[ 77%] Building LLVM bitcode wcsftime.c.bc
[ 77%] Linking LLVM bitcode library libc.bc
[ 77%] Built target libc
[ 78%] Linking CXX static library ../../lib/libpasses.a
[ 78%] Built target passes
In file included from /home/eos/eosio/libraries/fc/src/crypto/elliptic_common.cpp:2:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/elliptic.hpp:3:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/common.hpp:7:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:28: error: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                      ~~~~~^~~~~~~~~~~
                           enable_if
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1766:12: note: 'enable_if' declared here
    struct enable_if 
           ^
In file included from /home/eos/eosio/libraries/fc/src/crypto/elliptic_impl_priv.cpp:5:
In file included from /home/eos/eosio/libraries/fc/src/crypto/_elliptic_impl_priv.hpp:2:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/elliptic.hpp:3:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/common.hpp:7:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:28: error: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                      ~~~~~^~~~~~~~~~~
                           enable_if
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1766:12: note: 'enable_if' declared here
    struct enable_if 
           ^
In file included from /home/eos/eosio/libraries/fc/src/crypto/signature.cpp:1:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/signature.hpp:2:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:28: error: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                      ~~~~~^~~~~~~~~~~
                           enable_if
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1766:12: note: 'enable_if' declared here
    struct enable_if 
           ^
1 error generated.
make[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/crypto/elliptic_common.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
1 error generated.
make[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/crypto/elliptic_impl_priv.cpp.o] Error 1
In file included from /home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:1:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/public_key.hpp:2:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/elliptic.hpp:3:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/common.hpp:7:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:28: error: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                      ~~~~~^~~~~~~~~~~
                           enable_if
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1766:12: note: 'enable_if' declared here
    struct enable_if 
           ^
In file included from /home/eos/eosio/libraries/fc/src/crypto/elliptic_secp256k1.cpp:1:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/elliptic.hpp:3:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/common.hpp:7:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:28: error: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                      ~~~~~^~~~~~~~~~~
                           enable_if
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1766:12: note: 'enable_if' declared here
    struct enable_if 
           ^
In file included from /home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:1:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/public_key.hpp:2:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/elliptic.hpp:3:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/common.hpp:7:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:83: error: a non-type template parameter cannot have type 'std::enable_if<0 <
      impl::type_info<public_key_shim, public_key_shim>::size, int>'
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                                                                                  ^
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:34:75: note: while substituting prior template arguments into non-type template parameter
      [with Pos = 0]
         using default_type = typename public_key::storage_type::template type_at<0>;
                                                                          ^~~~~~~~~~
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:34:84: note: while checking a default template argument used here
         using default_type = typename public_key::storage_type::template type_at<0>;
                                                                          ~~~~~~~~~^
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:35:28: error: use of undeclared identifier 'default_type'; did you mean 'default_ops'?
         using data_type = default_type::data_type;
                           ^~~~~~~~~~~~
                           default_ops
/home/eos/opt/boost_1_66_0/include/boost/multiprecision/cpp_int.hpp:1872:11: note: 'default_ops' declared here
namespace default_ops{
          ^
In file included from /home/eos/eosio/libraries/fc/src/crypto/elliptic_r1.cpp:1:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/elliptic_r1.hpp:3:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/common.hpp:7:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:28: error: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                      ~~~~~^~~~~~~~~~~
                           enable_if
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1766:12: note: 'enable_if' declared here
    struct enable_if 
           ^
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:35:42: error: no type named 'data_type' in namespace 'boost::multiprecision::default_ops'
         using data_type = default_type::data_type;
                           ~~~~~~~~~~~~~~^
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:36:43: error: use of undeclared identifier 'data_type'
         using wrapper = checksummed_data<data_type>;
                                          ^
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:38:35: error: use of undeclared identifier 'data_type'
         if (bin.size() == sizeof(data_type) + sizeof(uint32_t)) {
                                  ^
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:39:44: error: use of undeclared identifier 'wrapper'; did you mean 'wrapped'?
            auto wrapped = fc::raw::unpack<wrapper>(bin);
                                           ^~~~~~~
                                           wrapped
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:39:18: note: 'wrapped' declared here
            auto wrapped = fc::raw::unpack<wrapper>(bin);
                 ^
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:39:44: error: variable 'wrapped' declared with 'auto' type cannot appear in its own initializer
            auto wrapped = fc::raw::unpack<wrapper>(bin);
                                           ^
/home/eos/eosio/libraries/fc/src/crypto/public_key.cpp:40:23: error: use of undeclared identifier 'wrapper'
            FC_ASSERT(wrapper::calculate_checksum(wrapped.data) == wrapped.check);
                      ^
In file included from /home/eos/eosio/libraries/fc/src/crypto/signature.cpp:1:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/signature.hpp:2:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:83: error: a non-type template parameter cannot have type 'std::enable_if<0 <
      impl::type_info<signature_shim, signature_shim>::size, int>'
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                                                                                  ^
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:22:65: note: while substituting prior template arguments into non-type template parameter
      [with Pos = 0]
         using default_type = signature::storage_type::template type_at<0>;
                                                                ^~~~~~~~~~
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:22:74: note: while checking a default template argument used here
         using default_type = signature::storage_type::template type_at<0>;
                                                                ~~~~~~~~~^
/home/eos/eosio/libraries/fc/src/crypto/elliptic_r1.cpp:21:22: warning: unused variable 'init' [-Wunused-variable]
          static int init = init_openssl();
                     ^
/home/eos/eosio/libraries/fc/src/crypto/elliptic_r1.cpp:43:22: warning: unused variable 'init' [-Wunused-variable]
          static int init = init_openssl();
                     ^
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:23:28: error: use of undeclared identifier 'default_type'; did you mean 'default_ops'?
         using data_type = default_type::data_type;
                           ^~~~~~~~~~~~
                           default_ops
/home/eos/opt/boost_1_66_0/include/boost/multiprecision/cpp_int.hpp:1872:11: note: 'default_ops' declared here
namespace default_ops{
          ^
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:23:42: error: no type named 'data_type' in namespace 'boost::multiprecision::default_ops'
         using data_type = default_type::data_type;
                           ~~~~~~~~~~~~~~^
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:24:43: error: use of undeclared identifier 'data_type'
         using wrapper = checksummed_data<data_type>;
                                          ^
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:26:35: error: use of undeclared identifier 'data_type'
         if (bin.size() == sizeof(data_type) + sizeof(uint32_t)) {
                                  ^
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:27:44: error: use of undeclared identifier 'wrapper'; did you mean 'wrapped'?
            auto wrapped = fc::raw::unpack<wrapper>(bin);
                                           ^~~~~~~
                                           wrapped
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:27:18: note: 'wrapped' declared here
            auto wrapped = fc::raw::unpack<wrapper>(bin);
                 ^
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:27:44: error: variable 'wrapped' declared with 'auto' type cannot appear in its own initializer
            auto wrapped = fc::raw::unpack<wrapper>(bin);
                                           ^
/home/eos/eosio/libraries/fc/src/crypto/signature.cpp:28:23: error: use of undeclared identifier 'wrapper'
            FC_ASSERT(wrapper::calculate_checksum(wrapped.data) == wrapped.check);
                      ^
In file included from /home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:1:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/private_key.hpp:2:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/elliptic.hpp:3:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/common.hpp:7:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:28: error: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                      ~~~~~^~~~~~~~~~~
                           enable_if
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1766:12: note: 'enable_if' declared here
    struct enable_if 
           ^
9 errors generated.
make[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/crypto/public_key.cpp.o] Error 1
In file included from /home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:1:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/private_key.hpp:2:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/elliptic.hpp:3:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/common.hpp:7:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:83: error: a non-type template parameter cannot have type 'std::enable_if<0 <
      impl::type_info<private_key_shim, private_key_shim>::size, int>'
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                                                                                  ^
/home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:95:67: note: while substituting prior template arguments into non-type template parameter
      [with Pos = 0]
         using default_type = private_key::storage_type::template type_at<0>;
                                                                  ^~~~~~~~~~
/home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:95:76: note: while checking a default template argument used here
         using default_type = private_key::storage_type::template type_at<0>;
                                                                  ~~~~~~~~~^
/home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:96:52: error: use of undeclared identifier 'default_type'; did you mean 'default_ops'?
         return private_key::storage_type(from_wif<default_type>(base58str));
                                                   ^~~~~~~~~~~~
                                                   default_ops
/home/eos/opt/boost_1_66_0/include/boost/multiprecision/cpp_int.hpp:1872:11: note: 'default_ops' declared here
namespace default_ops{
          ^
/home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:96:52: error: unexpected namespace name 'default_ops': expected expression
         return private_key::storage_type(from_wif<default_type>(base58str));
                                                   ^
In file included from /home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:1:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/private_key.hpp:2:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/elliptic.hpp:3:
In file included from /home/eos/eosio/libraries/fc/include/fc/crypto/common.hpp:7:
/home/eos/eosio/libraries/fc/include/fc/static_variant.hpp:358:83: error: a non-type template parameter cannot have type 'std::enable_if<0 <
      impl::type_info<private_key_shim, private_key_shim>::size, int>'
    template<int Pos, std::enable_if_t<Pos < impl::type_info<Types...>::size,int> = 1>
                                                                                  ^
/home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:116:54: note: while substituting prior template arguments into non-type template parameter
      [with Pos = 0]
         using default_type = storage_type::template type_at<0>;
                                                     ^~~~~~~~~~
/home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:116:63: note: while checking a default template argument used here
         using default_type = storage_type::template type_at<0>;
                                                     ~~~~~~~~~^
/home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:117:46: error: use of undeclared identifier 'default_type'; did you mean 'default_ops'?
         return to_wif(_storage.template get<default_type>());
                                             ^~~~~~~~~~~~
                                             default_ops
/home/eos/opt/boost_1_66_0/include/boost/multiprecision/cpp_int.hpp:1872:11: note: 'default_ops' declared here
namespace default_ops{
          ^
/home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:117:46: error: unexpected namespace name 'default_ops': expected expression
         return to_wif(_storage.template get<default_type>());
                                             ^
/home/eos/eosio/libraries/fc/src/crypto/private_key.cpp:117:59: error: expected unqualified-id
         return to_wif(_storage.template get<default_type>());
                                                          ^
1 error generated.
make[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/crypto/elliptic_secp256k1.cpp.o] Error 1
9 errors generated.
2 warnings and 1 error generated.
make[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/crypto/signature.cpp.o] Error 1
make[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/crypto/elliptic_r1.cpp.o] Error 1
8 errors generated.
make[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/crypto/private_key.cpp.o] Error 1
make[1]: *** [libraries/fc/CMakeFiles/fc.dir/all] Error 2
make: *** [all] Error 2

    >>>>>>>>>>>>>>>>>>>> MAKE building EOSIO has exited with the above error.

Upgraded to g++-6 and the issue is resolved.

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-6
Was this page helpful?
0 / 5 - 0 ratings