On Thu, 30 Jan 2003 20:29:18 +0100, Terje Slettebų
<[EMAIL PROTECTED]> wrote:

>You don't need expressions (if by that you mean an object of the type to
>test, or pointer/reference to it) to check for convertibility, as it may be
>done with sizeof, so no object of any kind need to be created. However, you
>may need an object, or pointer/reference to it, to use function templates.
>Also, that won't make it a compile-time expression, so why use function
>templates for this?

The issue is not about creating objects or not but about what does it
mean for "a type" to be convertible to another. Personally I have no
idea what the meaning can be. Instead, the standard specifies what it
means for an "expression" to be implicitly convertible to another:

  4/3: An expression e can be implicitly converted to a type T
       if and only if the declaration ``T t=e;'' is wellformed,
       for some invented temporary variable t (8.5).


[Incidentally: this is one of the few places in which the standard
uses "if and only if" where "if and only if" is intended; in other
places it just uses "if" :-( ]

I brought up this problem in reply to the initial post of the thread
"is_convertible corner case" thinking, however, that the documentation
of boost::is_convertible clarified that (the type_traits library is
one of the library I almost know nothing about). It turned out,
instead, that not only the documentation doesn't, but the ISO proposal
doesn't either. This one, together with the access-checking problem:

  class X {
      operator int(); // private
      friend class Y;
  };

  class Y {
      void f() {
          is_convertible<X, int>::value;  // true or false??
                                          // or error?
      }
  };


are the two main issues. You can find more details in the above
mentioned thread.


Genny.

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to