
On Sun, Jun 13, 2010 at 1:47 PM, Scott McMurray <me22.ca+boost@gmail.com> wrote:
On 13 June 2010 10:33, <bdawes@acm.org> wrote:
Author: bemandawes Date: 2010-06-13 13:33:39 EDT (Sun, 13 Jun 2010) New Revision: 62919 URL: http://svn.boost.org/trac/boost/changeset/62919
[...]
@@ -620,7 +620,7 @@ basic_path< String, Traits > & ph ) { String str; - is >> str; + std::getline(is, str); // See ticket 3863 ph = str; return is; }
I'm not convinced this is the right approach here, since
cout << mypath << ' ' << myint;
doesn't roundtrip with
cin >> mypath >> myint;
the way I expect operator<< and operator>> to work.
I agree with you that there is a problem here.
Perhaps the portable pathname grammar could be extended to allow backslash-escaping of spaces and backslashes? That or remove the stream operators entirely and force people to choose which way they want to print the path and deal with the result as a fully-general string.
In thinking about your suggestion, and several similar approaches, I realized the problem isn't limited to filesystem::path. It pops up every time someone wants to stream string values. It should be pretty simple to write two function templates: For output: template<String> String delimit(const String& s); Returns: s wrapped in double-quote characters. Any double-quote characters in s are escaped. A similar function for input. I'll think this in more detail later today, but in the meantime perhaps someone else could flesh out this idea. Thanks, --Beman