[Bug c++/16174] New: [3.4/3.5 Regression] deducing top-level consts
giovannibajo at libero dot it
gcc-bugzilla@gcc.gnu.org
Thu Jun 24 10:50:00 GMT 2004
This comes from Rani Sharoni's implementation of auto_ptr:
http://tinyurl.com/2l2ge
--------------------------------------------------
template <class T> struct K
{
K();
K(K<T> & rhs);
K(K<T> const& rhs);
template <class U> K(K<U> const& rhs);
private:
template <class U> struct A;
template <class U> struct A< K<U> const>
{ typedef typename K<U>::compile_time_error type; };
// This is used to reject calls to the copy constructor
// with objects which are top-level const. If they are
// const, the specialization of A is instantiated and
// causes a compile time error. Otherwise, the general
// template is picked up, it misses definition, so this
// ctor declaration is rejected by SFINAE and everybody
// is happy.
// GCC 3.4.1pre and 3.5.0 always matches A's specialization
// when instantiating from foo(), and this causes the error.
template <class U>
K(U& rhs, typename A<U>::type = 0);
};
K<int> foo(void)
{
return K<int>();
}
--------------------------------------------------
This code works on any released GCC since 3.0, but stopped working on 3.4
branch and mainline lately, probably because of the work done by Nathan.
Nathan, can you check if the code is indeed invalid and we are now rightfully
rejecting it? Latest version of EDG accepts it.
--
Summary: [3.4/3.5 Regression] deducing top-level consts
Product: gcc
Version: 3.5.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: giovannibajo at libero dot it
CC: gcc-bugs at gcc dot gnu dot org,nathan at gcc dot gnu
dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16174
More information about the Gcc-bugs
mailing list