小编And*_*zej的帖子

addressof()可以实现为constexpr函数吗?

我需要写一个constexpr地址的函数,但我发现它是不可能的.有谁知道这是否可能?

cppreference.com上的参考实现:

template< class T >
T* addressof(T& arg) 
{
  return reinterpret_cast<T*>(
           &const_cast<char&>(
              reinterpret_cast<const volatile char&>(arg)
           )
         );
}
Run Code Online (Sandbox Code Playgroud)

使用reinterpret_cast(类似于GCC实现),所以它不会这样做.我可以看到最新的C++标准草案,N3485也不要求addressof()是constexpr,即使很多函数形成头<utility>最近已升级到constexpr.

一个可能的,虽然不是很有说服力或有用的用例,它将是:

constexpr MyType m;
constexpr MyType const* p = &m;           // this works today
constexpr MyType const* p = addressof(m); // this is my question
Run Code Online (Sandbox Code Playgroud)

想象一下,MyType重载了operator&.

c++ c++11

16
推荐指数
2
解决办法
808
查看次数

C++20 是否要求使用 IANA 时区数据库来实现?

C++20<chrono>库附带本地时间和时区支持。该库的接口与IANA 时区数据库的接口兼容,但问题是,C++ 标准是否要求实现实际使用 IANA 时区数据库及其所有历史数据?

\n

在线 C++ 参考声称确实如此:请参阅此处。C++ 标准本身包含一个较弱的声明

\n
\n

[time.zone] 描述用于访问 IANA 时区数据库的接口,该数据库与 sys_\xc2\xadtime 和 local_\xc2\xadtime 互操作。\n此接口为两种民用日历类型 ([time.cal]) 提供时区支持以及用户定义的日历。

\n
\n

它只提到了接口,但没有提到数据。标准中对时区库的后续描述不再进一步引用 IANA 时区数据库。

\n

我的结论是C++ Reference是错误的,并且不需要实现就可以使用IANA时区数据库。有人可以确认这个结论是否正确吗?

\n

c++ language-lawyer c++-chrono c++20

12
推荐指数
1
解决办法
725
查看次数

如何在Clang中检测libstdc ++版本?

我想在Clang中编写一个"可移植"的C++库."可移植"意味着我检测(在C预处理器中)编译环境中可用的C++功能并使用这些功能或提供我的解决方法.这类似于Boost库正在做的事情.

但是,某些功能的存在不取决于语言,而是取决于标准库实现.我特别感兴趣的是:

  • 类型特征(哪些是可用的和拼写的)
  • 如果initializer_listconstexpr.

我发现这有问题,因为默认情况下Clang不使用自己的标准库实现:它使用libstdc ++.虽然锵有预定义的预处理宏__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__,它们分别硬编码值4,2,1,他们告诉我一些关于可用的libstdc ++的功能.

如何在Clang预处理器中检查它使用的libstdc ++版本?

c++ clang c-preprocessor

9
推荐指数
1
解决办法
3530
查看次数

GCC 或 Clang 是否实现 chrono::current_zone()?

Cppreference 提到函数current_zone()<chrono>. 这个功能在 GCC 或 Clang 中实现了吗?我想在在线工具之一中测试它,例如https://wandbox.orghttps://godbolt.org/,但它似乎丢失了。

c++ g++ clang++ c++20

7
推荐指数
1
解决办法
1755
查看次数

标签 统计

c++ ×4

c++20 ×2

c++-chrono ×1

c++11 ×1

c-preprocessor ×1

clang ×1

clang++ ×1

g++ ×1

language-lawyer ×1