Keywords: classdesc

Next: Objective-C C++ interface Up: Classdesc Documentation Previous: MPISPMD Contents Index

# 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 {};