[Bug c++/45012] Invalid ambiguity on partial class specialization matching

2011-11-17 Thread ramana at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45012

Ramana Radhakrishnan ramana at gcc dot gnu.org changed:

   What|Removed |Added

 CC||ramana at gcc dot gnu.org

--- Comment #6 from Ramana Radhakrishnan ramana at gcc dot gnu.org 2011-11-17 
16:03:34 UTC ---
It was fixed actually by this commit . 

Author: jason
Date: Tue Sep 27 02:13:00 2011
New Revision: 179230

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=179230
Log:
PR c++/45102
* pt.c (tsubst_copy_and_build) [CONST_DECL]: Don't pull out
constant value if we're still in a template.

Added:
trunk/gcc/testsuite/g++.dg/template/partial13.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/pt.c
trunk/gcc/testsuite/ChangeLog


[Bug c++/45012] Invalid ambiguity on partial class specialization matching

2011-09-26 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45012

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 CC||potswa at mac dot com

--- Comment #4 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-26 
18:28:15 UTC ---
*** Bug 46105 has been marked as a duplicate of this bug. ***


[Bug c++/45012] Invalid ambiguity on partial class specialization matching

2011-09-26 Thread jason at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45012

Jason Merrill jason at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 CC||jason at gcc dot gnu.org
 Resolution||FIXED
 AssignedTo|unassigned at gcc dot   |jason at gcc dot gnu.org
   |gnu.org |
   Target Milestone|--- |4.7.0
  Known to fail||

--- Comment #5 from Jason Merrill jason at gcc dot gnu.org 2011-09-27 
02:22:29 UTC ---
Fixed for 4.7.


[Bug c++/45012] Invalid ambiguity on partial class specialization matching

2010-07-20 Thread rodolfo at rodsoft dot org


--- Comment #1 from rodolfo at rodsoft dot org  2010-07-21 02:49 ---
The code I posted was meant to be compiled in c++0x mode, but if we write
directly the definition of std::enable_if, it also happens in c++03 mode.
So, instead of #include type_traits, one should write:

template bool B, class T=void struct enable_if;

template class T
struct enable_iftrue,T 
{  
typedef T type;
};

Of course, I forgot to add the error messages:

teste.cpp:30: error: ambiguous class template instantiation for ‘struct
foobar2, bar2, void’
teste.cpp:19: error: candidates are: struct fooVM, VM, typename
enable_if((M == RUNTIME) || (M == 2)), void::type
teste.cpp:25: error: struct fooV1M, V2M, typename
enable_if((M == RUNTIME) || (M == 2)), void::type
teste.cpp:30: error: aggregate ‘foobar2, bar2, void x’ has incomplete
type and cannot be defined


-- 

rodolfo at rodsoft dot org changed:

   What|Removed |Added

 CC||rodolfo at rodsoft dot org
   Keywords||rejects-valid
  Known to fail||4.4.3 4.5.0


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



[Bug c++/45012] Invalid ambiguity on partial class specialization matching

2010-07-20 Thread pinskia at gmail dot com


--- Comment #2 from pinskia at gmail dot com  2010-07-21 02:53 ---
Subject: Re:   New: Invalid ambiguity on partial class specialization matching



On Jul 20, 2010, at 7:43 PM, rodolfo at rodsoft dot org
gcc-bugzi...@gcc.gnu.org 
  wrote:

 The following code doesn't compile unless variable RUNTIME is  
 defined as a
 static const int instead of an enum:


This enum value has an anonymous type which is not valid in the  
context of templates in C++03/98. It is valid in the current draft of C 
++0x though. But I cannot remember if 4.5 implements that rule for - 
std=gnu++0x (-std=c++0x).



 #include type_traits

 enum { RUNTIME = 0 };
 // it compiles with the previous line commented out and the next  
 commented in
 // static const int RUNTIME=0;

 template class T, class U, class EN=void struct foo;

 template templateint class V, int M
 struct fooVM,VM, typename std::enable_ifM==RUNTIME ||  
 M==2::type {};

 template templateint class V1, templateint class V2, int M
 struct fooV1M,V2M, typename std::enable_ifM==RUNTIME ||  
 M==2::type {};

 template int M struct bar {};

 foobar2,bar2 x;


 -- 
   Summary: Invalid ambiguity on partial class specialization
matching
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rodolfo at rodsoft dot org
 GCC build triplet: x86_64-pc-linux-gnu
  GCC host triplet: x86_64-pc-linux-gnu
 GCC target triplet: x86_64-pc-linux-gnu


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



-- 


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



[Bug c++/45012] Invalid ambiguity on partial class specialization matching

2010-07-20 Thread rodolfo at rodsoft dot org


--- Comment #3 from rodolfo at rodsoft dot org  2010-07-21 03:03 ---
(In reply to comment #2)
 This enum value has an anonymous type which is not valid in the  
 context of templates in C++03/98. It is valid in the current draft of C 
 ++0x though. But I cannot remember if 4.5 implements that rule for - 
 std=gnu++0x (-std=c++0x).

But I'm not using that anonymous type for template argument deduction (i.e.:
foobarRUNTIME,barRUNTIME), I'm just using in a comparison with an int.
But even if I turn it into a named type (i.e.: enum value_t { RUNTIME=-1 };),
it doesn't compile.


-- 


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