template <class Solution = solution< state<set<size-1>::value, set<2*size-2>::value, set<2*size-2>::value>, item<size-1>, item<size-1> > > struct queen : queen<typename Solution::nextStep> { template <bool, class ASolution> struct print { static void it() {} }; template <class ASolution> struct print<true,ASolution> { static void it() { std::cout<<" "; std::cout<<static_cast<char>( 'a' + ASolution::column ); std::cout<<static_cast<char>( '1' + ASolution::row ); } }; queen() { print<Solution::useNextRow,Solution>::it(); } }; template <> struct queen<null> { queen() { std::cout<<"Result:"; } }; int main() { queen<> Queen; }