[Bug c++/42013] New: cv-qualification of conditional expression type depending on the value of its first expression?!?

paolo dot carlini at oracle dot com gcc-bugzilla@gcc.gnu.org
Thu Nov 12 03:40:00 GMT 2009


I'm seeing something strange while implementing C++0x declval. In a nutshell,
since I'm not reading anything in 5.16 (of C++03) saying that the type of a
conditional expression depends on the value of its first expression, I'm
surprised that this is the case with GCC, as far as cv-qualification is
concerned.

By the way, if actually this is conforming behavior, then the current C++0x
specifications for the two arguments common_type become really weird (see
20.6.7/3 in N2960): the cv-qualification of the common_type ends up depending
on the order of the types. Cannot be right, IMHO.

For example, the below doesn't compile:

template<typename _Tp>
  struct __declval_protector
  {
     static _Tp __delegate();
  };

template<typename _Tp>
  _Tp
  declval()
  {
    return __declval_protector<_Tp>::__delegate();
  }

template<typename _Tp, typename _Up>
  struct common_type
  {
    typedef __decltype(true  ? declval<_Tp>() : declval<_Up>()) typet;
    typedef __decltype(false ? declval<_Tp>() : declval<_Up>()) typef;
  };

template<typename, typename> struct is_same;

template<typename _Tp> struct is_same<_Tp, _Tp> { typedef _Tp type; };

void f()
{
  typedef common_type<int, const int>::typet typet;
  typedef common_type<int, const int>::typef typef;

  typedef is_same<typet, typef>::type type;
}


-- 
           Summary: cv-qualification of conditional expression type
                    depending on the value of its first expression?!?
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: paolo dot carlini at oracle dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42013



More information about the Gcc-bugs mailing list