Почему явный конструктор, ожидающий, что std :: shared_ptr принимает nullptr?

0

Следующий код компилируется с 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)?

  • 0
    Как примечание, универсальный или иным образом конструктор template может использовать SFINAE, чтобы делать то, что вы хотите.
Теги:
c++11
explicit

1 ответ

4
Лучший ответ

Должно ли явное запрещение компилятору вызывать не std :: shared_ptr (nullptr)?

Нет, явный конструктор остановил бы это:

Foo foo = some_shared_ptr;

Он не влияет на конструкторы shared_ptr, поэтому неявное преобразование из nullptr в shared_ptr все еще разрешено.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню