ある constexpr 関数のコンパイル可否が、コンパイラ毎に異なる。どのコンパイラの挙動がC++20仕様に準拠してるでしょう?

発生している問題・エラーメッセージ

下記コードのコンパイル可否の挙動が、MSVC と Clang で異なります。
「 C++20の言語仕様の時点で、どちらの挙動が正しいか? 」を、明確に把握してる方がいらっしゃったら、是非伺えると幸いです。
どうぞよろしくお願いします。

該当のソースコード

c++11

1#include <cstdio>2#include <cstdlib>3 4// MSVC で NG だが、Clang で OK5constexpr float operator ""_pi( const char* i_value ){6 return std::strtof( i_value, nullptr ) * 3.14159265f; // strtof() と constexpr の関係が問題。コンパイル可否の違いになっている7}8 9int main(){10 std::printf( "%f\n", 2_pi );11}

試したこと

下記の両コンパイラでコンパイルを試み、結果を確認した

補足情報(FW/ツールのバージョンなど)

試行したコンパイラ
Microsoft(R) C/C++ Optimizing Compiler Version 19.37.32825 for x86
Clang 16.0

コメントを投稿

0 コメント