Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Bastian_B_
New Contributor I
241 Views

Intel C++ Compiler 16.0.2 fails to compile C++11 code (using GCC 5.3.0 headers)

Hello,

I can't compile the following code:

#include <unordered_map>
#include <utility>
#include <tuple>

int main(int argc, char** argv) {
  std::unordered_map<int, int> map;
  int a1 = 0;
  int a2 = 1;
  map.emplace(std::piecewise_construct, std::make_tuple(a1), std::make_tuple(a2));
  return 0;
}

using the Intel C++ Compiler version 16.0.2 (from Parallel Studio XE 2016.2.181), when using the libstdc++ headers which ship with GCC 5.3.0. I'm compiling like this:

icpc -std=c++11 -o bla bla.cc

where bla.cc contains the above code. The error message is:

icpc -std=c++11 -o bla bla.cc
/usr/include/c++/5.3.0/bits/hashtable.h(1526): error: no instance of overloaded function "std::forward" matches the argument list
            argument types are: (const std::piecewise_construct_t)
  	__node_type* __node = this->_M_allocate_node(std::forward<_Args>(__args)...);
  	                                             ^
          detected during:
            instantiation of "std::pair<std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::iterator, bool> std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::_M_emplace(std::true_type, _Args &&) [with _Key=int, _Value=std::pair<const int, int>, _Alloc=std::allocator<std::pair<const int, int>>, _ExtractKey=std::__detail::_Select1st, _Equal=std::equal_to<int>, _H1=std::hash<int>,
                      _H2=std::__detail::_Mod_range_hashing, _Hash=std::__detail::_Default_ranged_hash, _RehashPolicy=std::__detail::_Prime_rehash_policy, _Traits=std::__umap_traits<false>, _Args=<const std::piecewise_construct_t &, std::tuple<int>, std::tuple<int>>]" at line 726
            instantiation of "std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::__ireturn_type std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::emplace(_Args &&...) [with _Key=int, _Value=std::pair<const int, int>, _Alloc=std::allocator<std::pair<const int, int>>, _ExtractKey=std::__detail::_Select1st, _Equal=std::equal_to<int>, _H1=std::hash<int>, _H2=std::__detail::_Mod_range_hashing,
                      _Hash=std::__detail::_Default_ranged_hash, _RehashPolicy=std::__detail::_Prime_rehash_policy, _Traits=std::__umap_traits<false>, _Args=<const std::piecewise_construct_t &, std::tuple<int>, std::tuple<int>>]" at line 380 of "/usr/include/c++/5.3.0/bits/unordered_map.h"
            instantiation of "std::pair<std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator, bool> std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace(_Args &&...) [with _Key=int, _Tp=int, _Hash=std::hash<int>, _Pred=std::equal_to<int>, _Alloc=std::allocator<std::pair<const int, int>>, _Args=<const std::piecewise_construct_t &, std::tuple<int>, std::tuple<int>>]" at line 9 of "bla.cc"

/usr/include/c++/5.3.0/bits/hashtable.h(1526): error: no instance of overloaded function "std::forward" matches the argument list
            argument types are: (const std::piecewise_construct_t)
  	__node_type* __node = this->_M_allocate_node(std::forward<_Args>(__args)...);
  	                                             ^
          detected during:
            instantiation of "std::pair<std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::iterator, bool> std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::_M_emplace(std::true_type, _Args &&) [with _Key=int, _Value=std::pair<const int, int>, _Alloc=std::allocator<std::pair<const int, int>>, _ExtractKey=std::__detail::_Select1st, _Equal=std::equal_to<int>, _H1=std::hash<int>,
                      _H2=std::__detail::_Mod_range_hashing, _Hash=std::__detail::_Default_ranged_hash, _RehashPolicy=std::__detail::_Prime_rehash_policy, _Traits=std::__umap_traits<false>, _Args=<const std::piecewise_construct_t &, std::tuple<int>, std::tuple<int>>]" at line 726
            instantiation of "std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::__ireturn_type std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::emplace(_Args &&...) [with _Key=int, _Value=std::pair<const int, int>, _Alloc=std::allocator<std::pair<const int, int>>, _ExtractKey=std::__detail::_Select1st, _Equal=std::equal_to<int>, _H1=std::hash<int>, _H2=std::__detail::_Mod_range_hashing,
                      _Hash=std::__detail::_Default_ranged_hash, _RehashPolicy=std::__detail::_Prime_rehash_policy, _Traits=std::__umap_traits<false>, _Args=<const std::piecewise_construct_t &, std::tuple<int>, std::tuple<int>>]" at line 380 of "/usr/include/c++/5.3.0/bits/unordered_map.h"
            instantiation of "std::pair<std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator, bool> std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace(_Args &&...) [with _Key=int, _Tp=int, _Hash=std::hash<int>, _Pred=std::equal_to<int>, _Alloc=std::allocator<std::pair<const int, int>>, _Args=<const std::piecewise_construct_t &, std::tuple<int>, std::tuple<int>>]" at line 9 of "bla.cc"

compilation aborted for bla.cc (code 2)

The same code compiles fine using GCC 5.3.0 and Clang 3.7. Any ideas? Is this a compiler bug?

0 Kudos
1 Reply
Melanie_B_Intel
Employee
241 Views

Yes I can reproduce this problem with our 16.0 update 2.

I've tested our current development 16.0 compiler (will be update 3 when released) and it will handle compile this test case successfully. Sorry for the trouble. 

--Melanie

Reply