The following code produces an error (below) when compiled with gcc 4.0.0.  The
correct code (the enum is cast to an int) is produced with 3.4.3 .   There seems
to be no reason to try the template, and even if there is, why is this template
not dismissed from consideration instead of producing an error.

bug.cpp: In function 'void Fn()':
bug.cpp:17: error: 'Fn()::<anonymous enum>' is/uses anonymous type
bug.cpp:17: error:   trying to instantiate 'template<class T> template<class A>
Derived::Derived(const A&)'


---- cut bug.cpp -----
template <typename V, typename T, int N>
struct Base {
    friend bool operator < (const V &a, const V &b) { return true; }
};
template <typename T>
struct Derived: public Base<Derived<T>, T, 3> {
    template <typename A> Derived(const A &a): Base<Derived, T, 3>(a) {}
};
class Extra
{
  Derived<double> v;
};
void Fn(void )
{
    enum { kConst = 8 };
    int idx = 4; 
    if( idx < kConst );
}
---- end bug.cpp ----

-- 
           Summary: cast of enum causes invalid template instanciation
                    instead of cast to int.
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: snoonan at nvidia dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux
  GCC host triplet: i686-pc-linux
GCC target triplet: i686-pc-linux


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

Reply via email to