我尝试在类范围之外定义一个静态变量,如:
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;
但我得到以下错误(对于所有gcc&gt; = 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'
所有clang版本(clang&gt; = 3.2)对我的代码没有任何问题。
问题似乎是功能参考。它可以在不使用模板类的情况下工作。
我的问题:
答案 0 :(得分:1)
我不知道这是不是一个错误,但你可以这样做:
template<typename T>
struct Foo {
void set(int i) {
}
typedef decltype(&Foo<T>::set) function_type;
static constexpr function_type i = &Foo<T>::set;
};
template<typename T>
constexpr typename Foo<T>::function_type Foo<T>::i;
int main()
{
Foo<int> f;
}