use "basic_models.g"; class foo { int x; foo(){ } foo(int const& x): x(x){ } foo(foo const& other): x(other.x){ } ~foo() { } }; class fooey< T > where { DefaultConstructible< T >, Regular< T > } { T x; fooey(){ } fooey(T const& x): x(x){ } fooey(fooey< T > const& other): x(other.x){ } ~fooey() { } }; fun bar0 (int const& x) -> foo @; fun bar1 (int const& x) -> fooey< int > @; fun bar2< T > where { DefaultConstructible< T >, Regular< T > } (T const& x) -> fooey< T > @; fun main () -> int @;