C++ 模板错误C2244无法使用Microsoft Visual Studio 2015中的constexpr将函数定义与现有声明相匹配

C++ 模板错误C2244无法使用Microsoft Visual Studio 2015中的constexpr将函数定义与现有声明相匹配,c++,visual-studio-2015,constexpr,C++,Visual Studio 2015,Constexpr,我的问题是:错误C2244在使用constexpr时无法将函数定义与现有声明匹配 template constexpr int x(){ 返回N*N; } B类模板{ 公众: int数据; }; 模板类别A{ 公众: INTF(B); }; 模板INTA::f(B){ 返回b.数据; } int main(){ A A; 返回0; } 如果删除constexpr函数并替换为表达式N*N,则一切正常 GNUC++编译它,我预计,CONTXPR在VisualStudio 2015上工作正常。代码

我的问题是:错误C2244在使用constexpr时无法将函数定义与现有声明匹配

template constexpr int x(){
返回N*N;
}
B类模板{
公众:
int数据;
};
模板类别A{
公众:
INTF(B);
};
模板INTA::f(B){
返回b.数据;
}
int main(){
A A;
返回0;
}
如果删除constexpr函数并替换为表达式N*N,则一切正常


GNUC++编译它,我预计,CONTXPR在VisualStudio 2015上工作正常。

代码看起来很好,GCC和CLANG认为它是好的-我的钱不是MSVC。VisualStudio 2015的代码> CONTXPRPR < /COD>支持仍然缺乏。IIRC,他们只支持C++11
constexpr
,以及C++14
constexpr
功能的一小部分。该问题在2017年RC中仍然存在,因此我认为您应该在Connect上报告。代码看起来不错,gcc和clang认为没问题->我的钱不在MSVC上。Visual Studio 2015的
constexpr
支持仍然有些欠缺。IIRC,他们只支持C++11
constexpr
,以及C++14
constexpr
功能的一小部分。该问题在2017年RC中仍然存在,因此我认为您应该在Connect上报告。
template<int N> constexpr int x() {
    return N*N;
}

template<int X, int N> class B {
public:
    int data;
};

template<int N> class A {
public:
    int f(B<x<N>(), N> b);
};

template<int N> int A<N>::f(B<x<N>(), N> b) {
    return b.data;
}

int main() {
    A<10> a;
    return 0;
}