>From: "Paul A. Bristow" <[EMAIL PROTECTED]> > This looks really neat - and potentially very useful.
Thanks. :) > Sadly, array is one of the most interesting cases - so I'm sure I won't be the > only one 'watching this space'. I've looked more into it, and it seems this is a problem not just for MSVC, but a problem with the current way of doing it, overloading operator<< for T(&)[N], sinch string literals has the type "const char[N]", as well... With overloaded operator<< for T(&)[N], and using "std::cout << "Test" ", g++ gives an ambiguity error, while on Intel C++, it selects the composite overload, resulting in funny output: It tries to output the null-terminator, as well, not knowing that for character strings, this is a string terminator. Besides, it can't really know if the user meant to send a character string, or a non-null-terminated character array. It seems the differences is down to subtle implementation differences. Here are the results, when an overloaded operator<< with T[N] is defined (S - string-literal operator, C - composite operator (T(&)[N]), A - ambiguous): const int array[3]; std::cout << array; MSVC 7 - C Intel C++ 7 - C g++ 3.2 - C const char array[3]; std::cout << array; MSVC 7 - A (S or C) Intel C++ 7 - C g++ 3.2 - C std::cout << "Test"; MSVC 7 - A (S or C) Intel 7 - C g++ 3.2 - A (S or C) In order to allow string literals to be used, without ambiguity or the wrong operator being selected, it seems that one needs to overload operator<< on something else than T(&)[N]. T[N] isn't an option, either, as this is the same as overloading on T *, which means it isn't able to deduce N. This quandary may be solved by wrapping arrays in an object, which then is passed to the overloaded operator<<. For example: std::cout << wrap_array(array); Comments/suggestions? > PS composite_format is a bit long, but I can't suggest better. I know, but I don't know any better, either. I see that Volodya suggests composite_io in another posting. That's another possibility. Anyway, I guess what's most important is to get the functionality in place. A default system may make it easier, as well. Regards, Terje _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost