// Test non-type template argument folding. // Origin: smacdonald@seimac.com // { dg-do compile } template < int I1, int I2 > class unit { public: unit() {} unit( const unit& ) {} template< int Q1, int Q2 > unit< I1 - Q1, I2 - Q2 > operator / ( const unit< Q1, Q2 >& rhs ) const { return unit< I1 - Q1, I2 - Q2 >(); } }; int main() { const unit<1,0> u1; const unit<2,0> u2; unit<-1,0> u3( u1 / u2 ); }