
Hi, I don't know if this has been discussed in the LWG but I'd like to make basic_path(const string_type& s); // (*) explicit. I'm right now working on the inspect tool, trying to cut down some of its dependencies. After eliminating boost::bind, which looks overkill to me in this case, I came upon a ironical situation: I modified the function contains_dot() to take a reference to path instead of a reference to string. The intent was to have a stricter type checking: bool contains_dot( /*std::string const& x */ path const & p) { return p.string().find( '.' ) != std::string::npos; } On the invoking code however, I forgot to remove ".string()", so I was still passing a string to it, except that the converting constructor (*) made everything compile anyway. As a result I was converting the path twice, from string and then again to string. This doesn't seem an unusual situation to me, especially when refactoring. What do you think? -- [ Gennaro Prota, C++ developer for hire ]