#ifndef __Intro_ah__ #define __Intro_ah__ #include class Foo; aspect Intro { pointcut dest () = "C"||"D"||"E"||"F"; public: static const int val = 2; advice dest () : unsigned long int I1; advice dest () : signed short (I2); advice dest () : int Foo::*(*I3); advice dest () : double Foo::*(* const (*I4(int,long))[47 + 11]); advice dest () : void I5(Intro::Int*),(*I6); advice dest () : static float pi; advice dest () && !"E": struct S1 { S1 (); ~S1 (); void f (); } IS1; // advice dest () : struct { struct Y {}; } IS2, *IS3; <== invalid C++ code! advice dest () : struct Z { struct Y {}; } IS2, *IS3; typedef int Int; advice dest () : Intro () {} advice dest () : Intro (Intro::Int); advice dest () && !"E" : ~Intro (); advice dest () : const Intro::Int square (Intro::Int); advice dest () : void *operator new (size_t), *pp; advice dest () : void g(); advice dest () : static const int v = (8 + 15 ) * sizeof(int) / Intro::val; }; advice Intro::dest () : void Intro::g() { printf ("introduced ...::g()\n"); } advice Intro::dest () : float Intro::pi = 3.14f; advice Intro::dest () : Intro::Intro (Intro::Int) : I3 (0) { printf ("introduced constructor\n"); } advice Intro::dest () && !"E" : Intro::~Intro () { square (Intro::val); printf ("introduced destructor\n"); } advice Intro::dest () : const Intro::Int Intro::square (Intro::Int arg) { printf ("introduced ...::square(Intro::Int)\n"); return arg * arg; } advice Intro::dest () && !"E" : void Intro::S1::f () { } advice Intro::dest () && !"E" : Intro::S1::S1 () { } advice Intro::dest () && !"E" : Intro::S1::~S1 () { } #endif // __Intro_ah__