Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果我的模板类型首先作为lambda参数出现,MSVC将引发一个奇怪的错误_C++_Visual Studio_Visual C++ - Fatal编程技术网

C++ 如果我的模板类型首先作为lambda参数出现,MSVC将引发一个奇怪的错误

C++ 如果我的模板类型首先作为lambda参数出现,MSVC将引发一个奇怪的错误,c++,visual-studio,visual-c++,C++,Visual Studio,Visual C++,考虑以下代码: #define SOLUTION 0 template <class T> constexpr int one = 1; template <class T> struct A { static constexpr int o = one<A<T>>; void call() { static_assert(one<A<T>> == 1, "Failure");

考虑以下代码:

#define SOLUTION 0

template <class T>
constexpr int one = 1;

template <class T>
struct A {
    static constexpr int o = one<A<T>>;

    void call() {
        static_assert(one<A<T>> == 1, "Failure");
    }
};

int main() {
#if SOLUTION
    A<int> object;
#endif

    [](A<int> a) {
        a.call();
    };

    return 0;
}
有趣的是,当我为
解决方案
宏输入1时,它成功构建。唯一的区别是未使用的
对象变量在
main
的作用域中定义

如果在main之前,我定义了这样一个函数,这也是非常好的:

void f(A<int>& a) {
    a.call();
}
无效f(A&A){
a、 call();
}
事实上,它和变量定义一样很好地解决了这个问题

这是编译器错误还是上述代码块违反了标准?

引用:

在VS2017更新3上编译,但不在(RTM)更新2上编译


我也在我的机器上确认了这种行为。这意味着相关的更正已经存在,并将很快引入生产版本本身,因此我认为此错误不值得进一步注意。

在VS2017更新3上编译,但在(RTM)更新2上编译。@Ajay奇怪,我的VS2017版本似乎是最新的,更新日期为5月30日,所以实际上是3天前。也许重要的是它是否是社区版(我的是社区版)?我也注意到了开发人员在这里遇到的问题:我还确认了这不仅仅发生在我自己的机器上。我已经安装了更新3的预览版,它有许多C++17功能。@Ajay哇,不知道预览!我马上就去试试。
void f(A<int>& a) {
    a.call();
}