C++0x decltype и оператор разрешения области видимости
С таким классом, как Foo:
struct Foo { static const int i = 9; };
Я считаю, что GCC 4.5 отклонит следующее
Foo f;
int x = decltype(f)::i;
Это будет работать, если я использую промежуточный typedef, такой как:
typedef decltype(f) ftype;
int x = ftype::i;
но я предпочитаю содержать пространство имен в чистоте. Я думал, что приоритет может быть проблемой, поэтому я также пробовал скобки, но не повезло. Это невозможно, как представлено, или есть синтаксис, который может мне помочь?
1 ответ
Решение
Это действительно C++0x, чтобы сказать decltype(f)::i
, GCC просто пока не поддерживает это. Вы можете обойти это с шаблоном идентичности
template<typename T> struct identity { typedef T type; };
int x = identity<decltype(f)>::type::i;
identity
является частью boost::mpl
Пространство имен.