Betrachten Sie den folgenden Code zu kompilieren:Mit CUDA 8 + gcc 5, unordered_map mit String-Schlüssel emplace nicht
#include <string>
#include <unordered_map>
int main()
{
std::string s("hello");
std::unordered_map<std::string, int> map;
map.emplace(s, 123);
return 0;
}
Dies baut fein mit:
- GCC 4.9.3, ohne CUDA
- GCC 5.3.1, keine CUDA
- GCC 4.9.3 via CUDA 7,5 (mit der Dateierweiterung .cu)
- GCC 4.9.3 via CUDA 8 RC (mit Datei EXTE nsion .cu)
aber nicht mit GCC 5.3.1 via CUDA 8 RC kompilieren.
Der Fehler, den ich bekommen ist:
/usr/include/c++/5/bits/hashtable.h(1526): error: no instance of overloaded function "std::forward" matches the argument list
argument types are: (std::__cxx11::string)
detected during:
instantiation of "std::pair<std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::iterator, __nv_bool> std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::_M_emplace(std::true_type, _Args &&) [with _Key=std::__cxx11::string, _Value=std::pair<const std::__cxx11::string, int>, _Alloc=std::allocator<std::pair<const std::__cxx11::string, int>>, _ExtractKey=std::__detail::_Select1st, _Equal=std::equal_to<std::__cxx11::string>, _H1=std::hash<std::__cxx11::string>, _H2=std::__detail::_Mod_range_hashing, _Hash=std::__detail::_Default_ranged_hash, _RehashPolicy=std::__detail::_Prime_rehash_policy, _Traits=std::__umap_traits<true>, _Args=<std::__cxx11::string &, int>]"
(726): here
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=std::__cxx11::string, _Value=std::pair<const std::__cxx11::string, int>, _Alloc=std::allocator<std::pair<const std::__cxx11::string, int>>, _ExtractKey=std::__detail::_Select1st, _Equal=std::equal_to<std::__cxx11::string>, _H1=std::hash<std::__cxx11::string>, _H2=std::__detail::_Mod_range_hashing, _Hash=std::__detail::_Default_ranged_hash, _RehashPolicy=std::__detail::_Prime_rehash_policy, _Traits=std::__umap_traits<true>, _Args=<std::__cxx11::string &, int>]"
/usr/include/c++/5/bits/unordered_map.h(380): here
instantiation of "std::pair<std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator, __nv_bool> std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace(_Args &&...) [with _Key=std::__cxx11::string, _Tp=int, _Hash=std::hash<std::__cxx11::string>, _Pred=std::equal_to<std::__cxx11::string>, _Alloc=std::allocator<std::pair<const std::__cxx11::string, int>>, _Args=<std::__cxx11::string &, int>]"
a.cu(8): here
1 error detected in the compilation of "/tmp/tmpxft_00003494_00000000-9_a.cpp1.ii".
Ist das ein Fehler CUDA? Wenn nicht, warum würde das passieren?
Gibt es irgendwo eine Frage? Das liest sich wie ein Fehlerbericht, nicht wie eine Frage. Ich vermute, dass es ersteres und nicht letzteres sein sollte. – talonmies
Endlich ein richtiger MCVE. – einpoklum