Mam klasę, którą napisałem, która nie usuwa typu. Interfejs publiczny to:Dlaczego ta obsada jest niejednoznaczna?
template <typename T>
value(const T &t);
value(value &&v);
template <typename T>
operator T() const;
Kiedy tworzę instancję wartości ze std :: string, nie mam żadnych problemów, wszystko działa zgodnie z oczekiwaniami. Kiedy próbuję uzyskać std :: string z powrotem, używając static_cast<std::string>(val)
, gdzie val
jest instancją wartości, która trzyma std :: string, pojawia się następujący komunikat o błędzie z VS2012:
błędu C2440: ' static_cast „: nie można przekonwertować z«value»do std :: string”
nie konstruktora może trwać rodzaj źródła, lub rozdzielczość przeciążenie konstruktor był niejednoznaczny
Gdybym wykomentuj operatora cast szablonie i dodać operator std::string() const
następnie kompiluje. Sądzę, że coś pomiędzy konstruktorami std :: string a operatorem rzutowania szablonowego ma taką samą dobroć dopasowania. Czy ktoś mógłby zasugerować, co się dzieje i jak to naprawić?
Czy komunikat o błędzie pokazuje kandydatów? –
Podaj przykład kompilacji (w miarę możliwości aż do wskazanego błędu). –
Oto minimalny przykład, który napisałem: http://codepad.org/XJ2Jv5fT – Dave