如何为 gsl:narrow 定义 __cpp_exceptions 进行编译?
How do I define __cpp_exceptions for gsl:narrow to compile?
我又糊涂了:(
我看过这个讨论:
我刚开始尝试使用 GSL。我已将 GSL 文件夹复制到我的 PC,并在我的 stdafx.h
文件中添加了 #include
。
但是gsl:narrow
命令没有暴露。然后我看到它指的是 __cpp_exceptions
macro/token.
我尝试在项目设置的预处理器列表中 #define
它,但它不喜欢它。
如何激活此 __cpp_exceptions
?
gsl 头文件:
#ifndef GSL_GSL_H
#define GSL_GSL_H
#include <gsl/algorithm> // copy
#include <gsl/assert> // Ensures/Expects
#include <gsl/byte> // byte
#include <gsl/pointers> // owner, not_null
#include <gsl/span> // span
#include <gsl/string_span> // zstring, string_span, zstring_builder...
#include <gsl/util> // finally()/narrow_cast()...
#ifdef __cpp_exceptions
#include <gsl/narrow> // narrow()
#endif
#endif // GSL_GSL_H
我正在尝试使用 Visual Studio 2022 预览版编译 MFC C++ 项目。
MSVC 编译器是否预定义了 __cpp_exceptions
宏取决于您的 Visual Studio 项目的设置(即是否启用 C++ 异常)。
您可以通过在“解决方案资源管理器”窗格中右键单击项目并select使用“属性”命令来check/change相关设置。
在出现的弹窗中,打开左侧导航树中的“C/C++”节点和select“代码生成”子节点。然后,在右侧窗格中,确保“启用 C++ 异常”选项设置为“Yes (/EHsc)”(其他类型的“Yes”选项也可能工作):
(注意:这适用于 Visual Studio 2019。我的电脑上没有安装 V/S 2022,所以我无法在该版本中检查它 –但我想这个过程非常相似。)
以下简短的控制台模式程序演示了更改该设置所造成的差异:
#include <iostream>
int main()
{
#ifdef __cpp_exceptions
std::cout << "yes"; // With "Yes (/EHsc)"
#else
std::cout << "no"; // With "No"
#endif
std::cout << std::endl;
return 0;
}
我又糊涂了:(
我看过这个讨论:
我刚开始尝试使用 GSL。我已将 GSL 文件夹复制到我的 PC,并在我的 stdafx.h
文件中添加了 #include
。
但是gsl:narrow
命令没有暴露。然后我看到它指的是 __cpp_exceptions
macro/token.
我尝试在项目设置的预处理器列表中 #define
它,但它不喜欢它。
如何激活此 __cpp_exceptions
?
gsl 头文件:
#ifndef GSL_GSL_H
#define GSL_GSL_H
#include <gsl/algorithm> // copy
#include <gsl/assert> // Ensures/Expects
#include <gsl/byte> // byte
#include <gsl/pointers> // owner, not_null
#include <gsl/span> // span
#include <gsl/string_span> // zstring, string_span, zstring_builder...
#include <gsl/util> // finally()/narrow_cast()...
#ifdef __cpp_exceptions
#include <gsl/narrow> // narrow()
#endif
#endif // GSL_GSL_H
我正在尝试使用 Visual Studio 2022 预览版编译 MFC C++ 项目。
MSVC 编译器是否预定义了 __cpp_exceptions
宏取决于您的 Visual Studio 项目的设置(即是否启用 C++ 异常)。
您可以通过在“解决方案资源管理器”窗格中右键单击项目并select使用“属性”命令来check/change相关设置。
在出现的弹窗中,打开左侧导航树中的“C/C++”节点和select“代码生成”子节点。然后,在右侧窗格中,确保“启用 C++ 异常”选项设置为“Yes (/EHsc)”(其他类型的“Yes”选项也可能工作):
(注意:这适用于 Visual Studio 2019。我的电脑上没有安装 V/S 2022,所以我无法在该版本中检查它 –但我想这个过程非常相似。)
以下简短的控制台模式程序演示了更改该设置所造成的差异:
#include <iostream>
int main()
{
#ifdef __cpp_exceptions
std::cout << "yes"; // With "Yes (/EHsc)"
#else
std::cout << "no"; // With "No"
#endif
std::cout << std::endl;
return 0;
}