Следующий код отлично компилируется с 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)?
template
конструктор может использовать SFINAE, чтобы делать то, что вы хотите. - person Yakk - Adam Nevraumont   schedule 03.04.2014