mercredi 1 mars 2017

Conflicting declaration for static variable with template class

I try to define a static variable outside the class scope like:

template<typename T>
struct Foo {
  void set(int i)  {
  }
  static constexpr decltype(&Foo<T>::set) i = &Foo<T>::set;
};

template<typename T>
constexpr decltype(&Foo<T>::set) Foo<T>::i;

Live example.

But I get following error (for all gcc >= 4.7):

conflicting declaration 'constexpr decltype (& Foo<T>::set(int))   Foo<T>::i'
note: previous declaration as 'constexpr decltype (& Foo<T>::set(int)) Foo<T>::i'

All clang version (clang >= 3.2) do not have any problem with my code.

The problem seems to be the function reference. It works without using a template class.

My questions:

  • Is it a bug?
  • How to do it in gcc?

Aucun commentaire:

Enregistrer un commentaire