jeudi 2 août 2018

Why does g++ 4.x allows implicit conversion of nullptr to another types when passed as parameter but > 5.x dont?

My understanding is that, nullptr could not be converted implicitly to another types. But later I "found" that it could be converted to bool. The issue is, I can see it being converted to bool on GCC 4.x, but it complains on GCC > 5.X

#include <iostream>
bool f(bool a){
    return !a;
}
// Type your code here, or load an example.
int main() {
    return f(nullptr);
}

On >5.x I get

<source>: In function 'int main()':

<source>:7:21: error: converting to 'bool' from 'std::nullptr_t' requires direct-initialization [-fpermissive]
     return f(nullptr);

             ^

<source>:2:6: note:   initializing argument 1 of 'bool f(bool)'
 bool f(bool a){

      ^
Compiler returned: 1

I couldn't find anything on the release notes of GCC 5.X that would explain that.

Can be observed here: https://godbolt.org/g/1Uc2nM

Can someone explain why there is a difference between versions and what rule is applied here.

Aucun commentaire:

Enregistrer un commentaire