私は困惑しています。 const auto ch = unsigned char{'p'};
は完全に有効な初期化式ではありませんか?ほぼ同じエラーメッセージで、3つの主要なコンパイラすべてでコンパイルできません。
エラー:関数スタイルのキャストまたは型構築では '('が必要です
中括弧を('p')
と入れ替えても何も変わりません。ただし、signed
またはunsigned
キーワードなしでコンパイルされます。
この種類の 明示的な型変換 には、1語の型名しか使用できないためです。
ブレース付き初期リストが後に続く単一のワード型名は、指定されたブレース付き初期リストで指定されたタイプ
designating a temporary (until C++17)
whose result object is (since C++17)
direct-list-initializedのprvalueです。
unsigned char
は単一のワード型名ではありませんが、char
はそうです。これは関数型キャスト式にも当てはまります。そのため、('p')
も機能しません。
回避策として、次のことができます
using uc = unsigned char; // or use typedef
const auto ch = uc{'p'};
または、他のキャストスタイルに変更します。
const auto ch = (unsigned char) 'p'; // c-style cast expression
const auto ch = static_cast<unsigned char>('p'); // static_cast conversion