#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 () : slice struct { unsigned long int I1; }; advice dest () : slice struct { signed short (I2); }; advice dest () : slice struct { int Foo::*(*I3); }; advice dest () : slice struct { double Foo::*(* const (*I4(int,long))[47 + 11]); }; advice dest () : slice struct { void I5(Intro::Int*),(*I6); }; advice dest () : slice struct SL0 { static float pi; }; advice dest () && !"E": slice struct SL05 { struct S1 { S1 (); ~S1 (); void f (); } IS1; }; // advice dest () : struct { struct Y {}; } IS2, *IS3; <== invalid C++ code! advice dest () : slice struct { struct Z { struct Y {}; } IS2, *IS3; }; typedef int Int; advice dest () : slice struct SL1 { SL1 () {} SL1 (Intro::Int); }; advice dest () && !"E" : slice struct SL2 { ~SL2 (); }; advice dest () : slice struct SL3 { const Intro::Int square (Intro::Int); }; advice dest () : slice struct { void *operator new (size_t), *pp; }; advice dest () : slice struct SL4 { void g(); }; advice dest () : slice struct { static const int v = (8 + 15 ) * sizeof(int) / Intro::val; }; }; slice void Intro::SL4::g() { printf ("introduced ...::g()\n"); } slice float Intro::SL0::pi = 3.14f; slice Intro::SL1::SL1 (Intro::Int) : I3 (0) { printf ("introduced constructor\n"); } slice Intro::SL2::~SL2 () { square (Intro::val); printf ("introduced destructor\n"); } slice const Intro::Int Intro::SL3::square (Intro::Int arg) { printf ("introduced ...::square(Intro::Int)\n"); return arg * arg; } slice void Intro::SL05::S1::f () { } slice Intro::SL05::S1::S1 () { } slice Intro::SL05::S1::~S1 () { } #endif // __Intro_ah__