template<typename S, int N>
struct ParameterValue
{
  ParameterValue(S value_) : value(value_) {}
  S value
};

typedef ParameterValue<std::string, 0>   ConfigName;
typedef ParameterValue<std::string, 1>   PathName;


You could use inheritance the use of numeric tagging.

template <typename T>
struct Param {
  T value;
};

struct ConfigName : Param<string> { };
struct PathName : Param<string> { };
 
Andrew Sutton
andrew.n.sutton@gmail.com