c++11 - Why implicit conversion is occurring in "if expression" although it should be explicit conversion -


this code not supposed compile , why ? principle of context in if expression ?

class b {   public:       b() {}       explicit operator bool () {}   };      int main (){       b bp;     //bool check = bp // error     if (bp){   //o.k         return 1;       }       return 0;   }   

thanks

that code supposed compile. standard expended great deal of effort ensure does.

there number of places expression "contextually converted bool" in places, explicit bool conversions called if they're available. 1 of contextual conversions if expression, in case.

this language allows explicit operator bool types still used conditional checking if(expr), can't other things without explicit conversion. can't pass function takes bool; can't return function returns bool, , forth.

all of contextual conversions explicit expressions in language features. explicit operator bool protects implicit user-defined conversions, while still allowing language-defined conversions happen.


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo