struct Unit { }; template< typename... X > static Unit declcheck( X... ) { return Unit(); } template< typename X = int > auto doSomeArithmetic( X &r, X &a, X &b ) -> decltype( declcheck( a + b, a % b, std::fmod( a, b ) ) ) { /* ... */ }