Both of them failed but the warnings and errors were few (something like 4 or 5).
I tried to check how the errors could be checked but i realized it was too complex for a person who didn't write the code.
One line the MSVC isn't able to understand now is this:
std::string errmsg = findMismatchedType0< 0 > (m_callable, typeid(void), typeid(void), typeid(void));
And this is the error signaled:
reflection.hpp(2016) : error C2677: binary '>' : no global operator defined which takes type 'const class type_info' (or there is no acceptable conversion)
Moreover i wonder why the compiler doesn't complain about the other line below:
Why would the compiler think it is doing a '>' operator? Perhaps it doesn't like a non-typed templated argument <0> ? And the other marco will expand to findMismatchedType1<1, T> which will have a type argument.
But if that is the case, why the line
if (testCompatible0< 0 > (m_callable, typeid(void), typeid(void), typeid(void), 0))
pinturic wrote: error C2783: 'class std::basic_string,class std::allocator > __cdecl agm::reflection::MethodBase::findMismatchedType0(s
truct agm::reflection::__callable__ *,const class type_info &,const class type_info &,const class type_info &)' : could not deduce template argument for 'param_size'
?? could not deduce template argument?? But it is specified ...
Did you forgot the <0> in findMismatchedType0<0> ??
If I can remeber correctly VC++ has some issues with handling white spaces in template declarations.
Try removing the spaces around "<" and ">". The code will look ugly but I have a feeling that it will compile.