Следующий код прекрасно компилируется с gcc 4.8.1
#include <memory>
class Foo {
public:
explicit Foo(const std::shared_ptr<Foo>& foo) {
}
};
int main() {
Foo foo(nullptr);
}
Почему это возможно? Разве явное не должно мешать компилятору неявно вызывать std :: shared_ptr (nullptr)?
Разве явное не должно мешать компилятору неявно вызывать std :: shared_ptr (nullptr)?
Нет, явный конструктор остановит это:
Foo foo = some_shared_ptr;
Это не влияет на конструкторы shared_ptr
, поэтому неявное преобразование из nullptr
в shared_ptr
все еще разрешено
Других решений пока нет …