#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
struct base {};
struct derived : public base {};
void g(bool b) {}
void g(boost::shared_ptr<base> b) {}
int main()
{
boost::shared_ptr<base> spbase = boost::make_shared<derived>();
boost::shared_ptr<derived> spderived = boost::make_shared<derived>();
g(true); // ok
g(spbase); //ok
g(boost::static_pointer_cast<base>(spderived)); // ok
g(spderived); // I am ambiguous between g(bool b) and g(boost::shared_ptr<base> b).
}
Может кто-нибудь объяснить мне, почему вызов г (spderived) вызывает неоднозначность между г (BOOL) и г (повышающее :: shared_ptr)?функция перегрузки ambiguty между BOOL и повышение :: shared_ptr <base> при вызове с усилением :: shared_ptr <derived>
Компиляция с GCC версии 4.6.3 дает следующие ошибки:
$ g++ shared_test.cpp -I/c/thirdparty/boost_1_55_0/ -o shared_test shared_test.cpp: In function 'int main()': shared_test.cpp:27:13: error: call of overloaded 'g(boost::shared_ptr&)' is ambiguous shared_test.cpp:27:13: note: candidates are: shared_test.cpp:7:6: note: void g(bool) shared_test.cpp:9:6: note: void g(boost::shared_ptr)
Примечание: Если добавить -std = C++ 11 компилируется нормально, но я использую C++ 98/C++ 03 , так что это действительно не помогает мне. Clang и VC создают аналогичную ошибку, скомпилированную под C++ 03.
Это одна из тех вещей, которые C++ 11 «исправляет», да, ожидайте, что это будет немного противно работать в C++ 03! Вот почему у нас есть обновления в первую очередь. –