Из-за ошибки я только что обнаружил, что этот код прекрасно компилируется с Visual Studio 17 и, возможно, с другими компиляторами. Теперь мне любопытно, почему?
#include <iostream>
#include <string>
std::string foo(){
return nullptr;
}
int main(){
auto s = foo();
std::cout << s << std::endl;
}
Я мог бы представить, что это потому, что std::basic_string
c'tor может быть вызван с char*
, и при возврате происходит неявное преобразование из ptr в std::string
(с NULL
в качестве аргумента, а затем с ошибкой). Я на правильном пути?