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



Jason Merrill <jason at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

           Keywords|                            |ice-on-valid-code

            Summary|lambda with templates       |[C++11] ICE with local

                   |                            |class/lambda template

                   |                            |argument



--- Comment #7 from Jason Merrill <jason at gcc dot gnu.org> 2013-03-06 
14:09:01 UTC ---

And reduced again, as much as possible.  The ICE is caused by trying to

generate the partially-instantiated type of foo<int>::bar, and thereby looking

up test<int>::value, which uses the (non-reentrant) dfs functions, in order to

mangle the name of B<C>'s vtable, which is also done using the dfs functions.



template<typename>

  struct test { static const int value = 0; };

template<int>

  struct enable_if { typedef void type; };



struct A { virtual void f() {} };

template<typename> struct B : A { };



template<typename, typename = void> struct foo;

template<typename T>

struct foo<T,typename enable_if<test<T>::value>::type>

{

  template <bool> void bar() const  {

    struct C { } c;

    B<C> b;

  }

};



int main() {

  foo<int> f;

  f.bar<true>();

}

Reply via email to