#include <iostream>
using namespace std;
/* Actions definitions */
template < typename Interface>
struct A1 {
void print( ) {
cout << "A1 - " ;
Interface i;
i.print ( ) ;
}
} ;
template < typename Interface>
struct A2 {
void print( ) {
cout << "A2 - " ;
Interface i;
i.print ( ) ;
}
} ;
/* Interfaces definitions */
struct I1 {
void print( ) {
cout << "I1\n " ;
}
} ;
struct I2 {
void print( ) {
cout << "I2\n " ;
}
} ;
/* Loop start (no loop now) */
template <
class Interface,
template < typename I> class Action1,
template < typename I> class ... Actions
>
void g( ) {
cout << "First Action<Interface>\n " ;
Action1< Interface> action;
action.print ( ) ;
}
/* Starting function */
template < class Interface, template < typename I> class ... Actions >
void f( )
{
g< Interface, Actions...> ( ) ;
}
/* Main */
int main( )
{
f< I1, A1, A2> ( ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8qIEFjdGlvbnMgZGVmaW5pdGlvbnMgKi8KdGVtcGxhdGU8dHlwZW5hbWUgSW50ZXJmYWNlPgpzdHJ1Y3QgQTEgewoJdm9pZCBwcmludCgpIHsKCQljb3V0IDw8ICJBMSAtICI7CgkJSW50ZXJmYWNlIGk7CgkJaS5wcmludCgpOwoJfQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgSW50ZXJmYWNlPgpzdHJ1Y3QgQTIgewoJdm9pZCBwcmludCgpIHsKCQljb3V0IDw8ICJBMiAtICI7CgkJSW50ZXJmYWNlIGk7CgkJaS5wcmludCgpOwoJfQp9OwoKLyogSW50ZXJmYWNlcyBkZWZpbml0aW9ucyAqLwpzdHJ1Y3QgSTEgewoJdm9pZCBwcmludCgpIHsKCQljb3V0IDw8ICJJMVxuIjsKCX0KfTsKc3RydWN0IEkyIHsKCXZvaWQgcHJpbnQoKSB7CgkJY291dCA8PCAiSTJcbiI7Cgl9Cn07CgovKiBMb29wIHN0YXJ0IChubyBsb29wIG5vdykgKi8KdGVtcGxhdGU8CiAgY2xhc3MgSW50ZXJmYWNlLAogIHRlbXBsYXRlPHR5cGVuYW1lIEk+IGNsYXNzIEFjdGlvbjEsCiAgdGVtcGxhdGU8dHlwZW5hbWUgST4gY2xhc3MgLi4uIEFjdGlvbnMKPgp2b2lkIGcoKSB7Cgljb3V0IDw8ICJGaXJzdCBBY3Rpb248SW50ZXJmYWNlPlxuIjsKCUFjdGlvbjE8SW50ZXJmYWNlPiBhY3Rpb247CglhY3Rpb24ucHJpbnQoKTsKfQoKLyogU3RhcnRpbmcgZnVuY3Rpb24gKi8KdGVtcGxhdGU8Y2xhc3MgSW50ZXJmYWNlLCB0ZW1wbGF0ZTx0eXBlbmFtZSBJPiBjbGFzcyAuLi4gQWN0aW9ucz4Kdm9pZCBmKCkKewoJZzxJbnRlcmZhY2UsIEFjdGlvbnMuLi4+KCk7Cn0KCi8qIE1haW4gKi8KaW50IG1haW4oKQp7CglmPEkxLCBBMSwgQTI+KCk7CglyZXR1cm4gMDsKfQ==
compilation info
prog.cpp: In function 'void f() [with Interface = I1, Actions = A1, A2]':
prog.cpp:58:16: instantiated from here
prog.cpp:49:58: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
stdout