struct Foo {} struct Bar { Foo f; alias f this; } void works( T )( T value ) if ( is( T : Foo ) ) {} void doesnotwork( T : Foo )( T value ) {} void main( ) { Bar b; works( b ); doesnotwork( b ); } The 'works' function runs without problem, 'doesnotwork' does (can you guess?) not work.
https://github.com/D-Programming-Language/dmd/pull/547
https://github.com/D-Programming-Language/dmd/commit/e99bd67fb689d54db837890990efcd6ad03efc57