使用带有模板参数的交换与 std::vector 包含冲突
using swap with template argument conflicts with std::vector include
今天我遇到了msvc2013编译器的一个非常奇怪的行为。将近一个小时后,我找到了原因错误。最小示例:
#include <iostream>
#include <vector>
int main(int argc, char *argv[])
{
float f1, f2;
std::swap<float>(f1, f2);
return 0;
}
当包含 std::vector 时,我在 msvc2013 中遇到了一堆非常奇怪的编译器错误!使用 mingw 编译代码时,代码编译得很好,正如我所期望的那样。
错误:
main.cpp
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDExlocale(341): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1892): error C2825: '_Alloc': must be a class or namespace when followed by '::'
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1944): note: see reference to class template instantiation 'std::_Vb_iter_base<_Alloc>' being compiled
with
[
_Alloc=float
]
main.cpp(10): note: see reference to class template instantiation 'std::_Vb_reference<float>' being compiled
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1892): error C2510: '_Alloc': left of '::' must be a class/struct/union
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1892): error C2146: syntax error: missing '>' before identifier 'difference_type'
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1898): error C2825: '_Alloc': must be a class or namespace when followed by '::'
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1898): error C2510: '_Alloc': left of '::' must be a class/struct/union
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1898): error C3646: '_Sizet': unknown override specifier
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1898): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1906): error C2061: syntax error: identifier '_Sizet'
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1913): error C2061: syntax error: identifier '_Sizet'
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1920): error C2061: syntax error: identifier '_Sizet'
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1937): error C3646: '_Myoff': unknown override specifier
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEvector(1937): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
是的 - 我知道这是现在的msvc2015编译器!我也测试了这个,这些是这个编译的错误消息
这是 msvc 中的一个奇怪错误,还是为什么会发生这种情况,甚至会发生?
这是 MSVC 编译器中的已知问题。他们认为"使用显式模板参数调用 swap() 实际上是标准所不允许的"。
相关文章:
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- std::vector的包装器,使数组的结构看起来像结构的数组
- 编译器如何区分std::vector的构造函数
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在std::vector上存储带有模板的类实例
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 为什么std::vector比数组慢
- std::vector::迭代器是否可以合法地作为指针
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 为什么std::vector和std::valarray初始化构造函数不同
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 在没有未定义行为的情况下实现类似std::vector的容器
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- 如何将AERT_Allocate与 std:vector 一起使用
- 推导 std::vector::back() 的返回类型
- 如何将原始字节附加到 std::vector?
- std::vector 没有重载函数的实例与参数列表匹配
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?