为什么 'std::unary_function' 仍然在 c++17 中编译?
Why does `std::unary_function` still compile in c++17?
std::unary_function
功能在 c++11 中被弃用,在 c++17 中被删除。但是使用 c++17 编译器标志,此代码仍可编译:
struct less_than_7 : std::unary_function<int, bool>
{
bool operator()(int i) const { return i < 7; }
};
在这里用g++ -std=c++17 -O0 -Wall -pedantic main.cpp
建造。
功能删除对于编译器是否可选?
由于它不再是 C++17 标准的一部分,因此它包含在您的一个源代码文件中与将内容引入 std
的代码属于同一类别。
换句话说,程序行为是未定义的。
程序工作是这种未定义行为的表现。也许您的实现定义了这种未定义的行为。但即便如此,您的代码也不是可移植的C++17。
虽然有标准和这些标准的多个版本是件好事,但现实情况是,不同的工具链具有不同的合规性级别。
这可能涉及延迟实现新功能、延迟实施更改或延迟删除内容。
这只是后者的一个案例。
VS 2019 已经删除了std::unary_function
,但 libstdc++ 和 libc++ 都没有。事情就是这样!
我试图找到合适的措辞,但实现在向std
添加额外名称方面确实有很大的回旋余地。这是你不能的主要原因 - 这两个名字可能会发生冲突。
特别是,现有实现可以在std
中具有帮助程序类。因此,std::unary_function
可能只是此特定实现的帮助程序模板。
相关文章:
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 代码块中无序多集的编译错误17.12
- 使用 C++17 编译特征需要_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING定义
- 如何使用msbuild和设置C++17命令行编译Visual Studio项目?
- clang C++17 std::vector over align type 使用 -mavx 编译时元素 SIGSE
- C++17:在编译时将类型映射到整数值
- 为什么 'std::unary_function' 仍然在 c++17 中编译?
- c++17在编译时将带有已删除复制构造函数的类添加到std::vector
- 无法编译简单的C++17程序
- 在 RedHat Linux Enterprise Developer Workstation 上编译 C++17 代码
- 有没有办法在 C++17 中创建编译时类型映射以进行类型检查?
- 使用 C++17,如何创建类型到值的编译时图?
- C++17 在逗号上拆分 constexpr 字符串并在编译时有元素的数量?
- 使用 CLion、CMake 和 VS2017 编译器编译 C++17
- 为什么 GCC 和 clang 之间编译的 c++17 lambda 存在差异?
- gcc 可以使用较旧的第三方库编译 C++17 代码吗?
- 在使用 -std=c++17 编译时在 GCC 中复活 std::auto_ptr
- 如何在编译时检测C 17中是否没有虚拟基础
- 当我击中不良的constexpr时,请停止Visual Studio 17编译
- 使用ld: __stack_chk_guard@@GLIBC_2.17编译错误