On Sat, 25 Jan 2003 12:17:18 -0000, "John Maddock" <[EMAIL PROTECTED]> wrote:
>> A string literal (narrow or wide) is an lvalue. > >Yes, you're right, however it's still a non-issue: array to pointer >conversions are allowed (int[2] to const int* for example) Yes, but the special conversion is from const char[N] to char*, not const char*. >Absolutely, sorry I meant "that's a really nasty corner case", no slur on >you intended. It's all right for me :-) [...] >A conversion is possible but would use a non-public constructor - the code >must not compile. >A conversion is possible but would use a non-public conversion operator - >the code must not compile. >A conversion is possible but is ambiguous - the code must not compile. > >It's the last three cases (and exactly which situations produce them) that >we are agonising over. It doesn't matter whether you use a class template >or an operator, you can't make these cases do anything meaningful. Perhaps >I should have said "ill formed" rather than "undefined", I'm still learning >the right terminology... Yes, I agree that they should be ill-formed. The problem is, as we have repeatedly pointed out, that the template implementation isn't adequate if is_convertible<>::value may depend on the context, because of possible violations of ODR. A built-in operator would solve the problem. Also, if you stick to expressions as source, the function templates seem to work (unless we discover some other problem with them too). Again, I like the approach to not put in the core language facilities that can be implemented with normal code but the order is: first I see what I want to get, then I see if it can be implemented. Here we seem to do the inverse: we see what can be done in current C++, and if it is not enough (because I can't do access checking) we are contented anyway. Seems a surrogate to me. Genny. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost