Workarounds

There are times when classdesc simply cannot correctly parse syntactically correct C++, or won't be able to be adapted to do so. One of these situations occurs when a class definition refers to an object in the containing namespace, but the descriptor definition requires the fully qualified version of the name. An example is as follows:

namespace foo
{
  struct bar
  {
    enum Foo {x, y, z};
  };


  template <bar::Foo t>
  class Foobar {};
}
which is syntactically correct C++, but the generated descriptor looks like
template < bar :: Foo t >  struct access_pack<class ::foo::Foobar<t> > {
void operator()(classdesc::pack_t& targ, const classdesc::string& desc,class ::foo::Foobar<t>& arg)
{
using namespace foo;
}
};
The problem is that bar::Foo is not visible in the classdesc_access namespace where the struct access_pack type must be declared.

As a workaround, whenever this situation is encountered, use the fully qalified version of the type, ie as follows:

  template <foo::bar::Foo t>
  class Foobar {};