explicit

When a constructor is specified as explicit, no automatic conversion will be used with that constructor – but parameters passed to the constructor may still be converted. For example:

    struct foo {
      explicit foo( int a )
        : a_( a )
      { }
      int a_;
    };
    int bar( const foo & f ) {
      return f.a_;
    }
    bar( 1 );  // fails because an implicit conversion from int to foo
               // is forbidden by explicit.
    bar( foo( 1 ) );  // works -- explicit call to explicit constructor.
    bar( foo( 1.0 ) );  // works -- explicit call to explicit constructor
                        // with automatic conversion from float to int.