That's ... weird.
Moving it outside causes the loop to run properly:
Code:
#include <iostream>
template<unsigned int N, unsigned int Row, unsigned int Col>
struct PropagatorLoop
{
void operator () () //(me_t& parent)
{
//Gecode::when(parent, parent.m_Board(Col, Row), reinterpret_cast<void (*)(Gecode::Space&)>(&XNQueens::Propagator<Row, Col>), nullptr, Gecode::ICL_DEF);
std::cout << "PropagatorLoop<N, Row, Col>\n";
PropagatorLoop<N, Row, Col + 1>()(/*parent*/);
}
};
template<unsigned int N, unsigned int Row>
struct PropagatorLoop<N, Row, N>
{
void operator () ()// (me_t& parent)
{
std::cout << "PropagatorLoop<N, Row, N>\n";
PropagatorLoop<N, Row + 1, 0>()(/*parent*/);
}
};
template<unsigned int N>
struct PropagatorLoop<N, N, N>
{
void operator () ()// (me_t& parent)
{
std::cout << "PropagatorLoop<N, N, N>\n";
}
};
template<unsigned int N>
class Test
{
private:
public:
Test() { PropagatorLoop<N, 0, 0>()(); }
};
int main()
{
Test<8>();
}
I'm just going to do that, then.