1 // REQUIRED_ARGS: -de 2 /* 3 TEST_OUTPUT: 4 --- 5 fail_compilation/depmsg.d(40): Deprecation: struct depmsg.main.Inner.A is deprecated - With message! 6 fail_compilation/depmsg.d(40): Deprecation: struct depmsg.main.Inner.A is deprecated - With message! 7 fail_compilation/depmsg.d(41): Deprecation: class depmsg.main.Inner.B is deprecated - With message! 8 fail_compilation/depmsg.d(41): Deprecation: class depmsg.main.Inner.B is deprecated - With message! 9 fail_compilation/depmsg.d(42): Deprecation: interface depmsg.main.Inner.C is deprecated - With message! 10 fail_compilation/depmsg.d(42): Deprecation: interface depmsg.main.Inner.C is deprecated - With message! 11 fail_compilation/depmsg.d(43): Deprecation: union depmsg.main.Inner.D is deprecated - With message! 12 fail_compilation/depmsg.d(43): Deprecation: union depmsg.main.Inner.D is deprecated - With message! 13 fail_compilation/depmsg.d(44): Deprecation: enum depmsg.main.Inner.E is deprecated - With message! 14 fail_compilation/depmsg.d(44): Deprecation: enum depmsg.main.Inner.E is deprecated - With message! 15 fail_compilation/depmsg.d(46): Deprecation: alias depmsg.main.Inner.G is deprecated - With message! 16 fail_compilation/depmsg.d(47): Deprecation: variable depmsg.main.Inner.H is deprecated - With message! 17 fail_compilation/depmsg.d(48): Deprecation: class depmsg.main.Inner.I!().I is deprecated - With message! 18 --- 19 */ 20 main()21void main() 22 { 23 class Inner 24 { 25 deprecated("With message!") 26 { 27 struct A { } 28 class B { } 29 interface C { } 30 union D { } 31 enum E { e }; 32 //typedef int F; 33 alias int G; 34 static int H; 35 template I() { class I {} } 36 } 37 } 38 with(Inner) 39 { 40 A a; 41 B b; 42 C c; 43 D d; 44 E e; 45 //F f; 46 G g; 47 auto h = H; 48 I!() i; 49 } 50 } 51 52 /* 53 TEST_OUTPUT: 54 --- 55 fail_compilation/depmsg.d(94): Deprecation: function depmsg.test12954.Foo.bar1 is deprecated - [C] Use Foo.bar42 instead 56 fail_compilation/depmsg.d(95): Deprecation: function depmsg.test12954.Foo.bar2 is deprecated - [E] Use Foo.bar42 instead 57 fail_compilation/depmsg.d(96): Deprecation: function depmsg.test12954.Foo.bar3 is deprecated - [S] Use Foo.bar42 instead 58 fail_compilation/depmsg.d(97): Deprecation: function depmsg.test12954.Foo.bar4 is deprecated - [F] Use Foo.bar42 instead 59 fail_compilation/depmsg.d(98): Deprecation: variable depmsg.test12954.Foo.v2 is deprecated - Forward reference 60 fail_compilation/depmsg.d(105): Deprecation: class depmsg.test12954.Obsolete is deprecated 61 fail_compilation/depmsg.d(105): Deprecation: function depmsg.test12954.Obsolete.obs is deprecated - Function is obsolete 62 --- 63 */ test12954()64void test12954() 65 { 66 struct Foo 67 { 68 enum DeprecatedReasonEnum = "[E] Use Foo.bar42 instead"; 69 static const DeprecatedReasonStatic = "[S] Use Foo.bar42 instead"; 70 static immutable DeprecatedReasonFunc = reason("Foo.bar42"); 71 72 static string reason (string name) 73 { 74 return "[F] Use " ~ name ~ " instead"; 75 } 76 77 deprecated("[C] Use " ~ `Foo.bar42 instead`) 78 void bar1 () {} 79 80 deprecated(DeprecatedReasonEnum) 81 void bar2 () {} 82 83 deprecated(DeprecatedReasonStatic) 84 void bar3 () {} 85 86 deprecated(DeprecatedReasonFunc) 87 void bar4 () {} 88 89 deprecated(Forward ~ Reference) int v2 = 2; 90 enum Forward = "Forward ", Reference = "reference"; 91 } 92 93 Foo f; 94 f.bar1; 95 f.bar2; 96 f.bar3; 97 f.bar4; 98 assert(f.v2 == 2); 99 100 deprecated class Obsolete 101 { 102 deprecated("Function is obsolete") void obs() {} 103 } 104 105 (new Obsolete).obs(); 106 } 107