一台计算机中的 msvs 2013 错误 C2057,另一台计算机中没有错误。这是怎么回事?
Posted
技术标签:
【中文标题】一台计算机中的 msvs 2013 错误 C2057,另一台计算机中没有错误。这是怎么回事?【英文标题】:msvs 2013 error C2057 in one computer, no error in another. What's going on? 【发布时间】:2014-11-06 23:09:58 【问题描述】:我有一些代码在两台机器(Windows 8.1、msvs 2013、最新更新等和 Windows 7 64 位、msvs 2013、最新更新等)中编译良好,并且相同的代码无法在另一台机器上编译(Windows 7 64 位、msvs 2013、最新更新等——是的,与其中一台工作机器相同)。所有机器都使用最新的平台工具集,项目文件与由 CMake 文件生成的相同。
我试图确定它并使最小的项目成为可能,但示例项目在有问题的机器上编译得很好。值得一提的是,下面是编译的示例,我在有问题的行中添加了注释。
#include <functional>
#include <vector>
#include <cstdint>
template<class T>
bool container_value_equal(typename T::const_reference v0, typename T::const_reference v1) return v0 == v1;
template<class T>
bool unordered_intersection_exists(const T& v0,
const T& v1,
// The below line fails in the problem computer + application!
const std::function< bool(typename T::const_reference, typename T::const_reference)>& f = container_value_equal<T>);
int main()
const std::vector<size_t> * vec2 = nullptr;
std::vector<size_t> vec;
const auto& vec_cref = vec;
unordered_intersection_exists(vec_cref, *vec2);
return 0;
template<class T>
bool unordered_intersection_exists(const T& vec0,
const T& vec1,
const std::function< bool(typename T::const_reference, typename T::const_reference)>& f)
for (const auto& v0 : vec0)
for (const auto& v1 : vec1)
if (f(v0, v1))
return true;
return false;
上述代码块与实际调用的代码块的唯一区别是代码位于静态库中,而不是我希望它有任何区别。 为我的 ACTUAL 程序生成的错误如下:
1>E:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\type_traits(1511): error C2057: expected constant expression
1> E:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(385) : see reference to function template instantiation '_Ty std::forward<_Fty>(remove_reference<_Fty>::type &&) throw()' being compiled
1> with
1> [
1> _Ty=bool (__cdecl &)(T::const_reference,T::const_reference)
1> , _Fty=bool (__cdecl &)(T::const_reference,T::const_reference)
1> ]
1> E:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(579) : see reference to function template instantiation 'void std::_Func_class<_Ret,const unsigned int &,const unsigned int &>::_Reset<_Fx(__cdecl &)>(_Fty)' being compiled
1> with
1> [
1> _Ret=bool
1> , _Fx=bool (T::const_reference,T::const_reference)
1> , _Fty=bool (__cdecl &)(T::const_reference,T::const_reference)
1> ]
1> E:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(579) : see reference to function template instantiation 'void std::_Func_class<_Ret,const unsigned int &,const unsigned int &>::_Reset<_Fx(__cdecl &)>(_Fty)' being compiled
1> with
1> [
1> _Ret=bool
1> , _Fx=bool (T::const_reference,T::const_reference)
1> , _Fty=bool (__cdecl &)(T::const_reference,T::const_reference)
1> ]
1> E:\Programming\GitHub\xxx\yyy\zzz\ddd/eee/fff.h(14) : see reference to function template instantiation 'std::function<bool (const unsigned int &,const unsigned int &)>::function<bool(T::const_reference,T::const_reference)>(_Fx (__cdecl &))' being compiled
1> with
1> [
1> _Fx=bool (T::const_reference,T::const_reference)
1> ]
1> E:\Programming\GitHub\xxx\yyy\zzz\aaa\bbb\ccc.cpp(443) : see reference to function template instantiation 'std::function<bool (const unsigned int &,const unsigned int &)>::function<bool(T::const_reference,T::const_reference)>(_Fx (__cdecl &))' being compiled
1> with
1> [
1> _Fx=bool (T::const_reference,T::const_reference)
1> ]
【问题讨论】:
确保您的Configuration Properties -> General -> Platform Toolset
设置为Visual Studio 2013
。
谢谢,已经是了
仔细检查Property Manager(不是项目属性)中默认包含和库的顺序。这些属性会影响构建环境,并且不会由项目文件携带。您可能在一台机器和另一台机器上使用不同版本的 Windows SDK。
【参考方案1】:
不是一个很好的(自我)答案,但我通过 not 在函数“bool unordered_intersection_exists(...)”中设置默认参数解决了这个问题。
【讨论】:
以上是关于一台计算机中的 msvs 2013 错误 C2057,另一台计算机中没有错误。这是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章
MSVS 2010。如何为解决方案中的所有程序集分配相同的版本?
在 msvs 2013 中 std::shared_ptr 的 compare_exchange_weak 是不是损坏?
你如何控制 Gradle 使用的 (MSVS) VC lib 目录?