**Chromium で禁止されている C++ 機能**

1. **`goto`**  
   - `goto` 文は使用しないでください。制御フローが追跡しづらくなるためです。

2. **`setjmp` / `longjmp`**  
   - これらの非ローカルジャンプは例外安全性を破壊するため、禁止されています。

3. **C++ 標準ライブラリの例外**  
   - `std::exception` や `std::runtime_error` などの標準例外を投げたり捕捉したりしないでください。代わりに Chromium のエラーハンドリング機構を利用してください。

4. **非トリビアルデストラクタ付きの `new` / `delete`**  
   - スマートポインタ (`std::unique_ptr`, `std::shared_ptr`) やスタック割当てを優先し、複雑なクリーンアップが必要な生の動的メモリは禁止です。

5. **`malloc` / `free`**  
   - C 風の割り当て関数ではなく、Chromium のメモリアロケータ(例:`base::Malloc`, `new`/`delete`)を使用してください。

6. **`std::mutex` と関連スレッドプリミティブ**  
   - Chromium コードベースは独自のスレッド安全抽象 (`base::Lock`, `base::WaitableEvent`) を用いるため、標準ライブラリのミューテックスは避けてください。

7. **`thread_local` ストレージ期間**  
   - C++11 の `thread_local` ではなく、Chromium のスレッドローカルユーティリティ(`THREAD_LOCAL`)を使用してください。

8. **C++ RTTI (ランタイム型情報)**  
   - RTTI を無効化 (`-fno-rtti`)し、`dynamic_cast`, `typeid` は使わないでください。Chromium の型識別メカニズムを利用しましょう。

9. **コンパイル時に評価できない `static_assert`**  
   - すべての `static_assert` はコンパイル時に解決可能な式である必要があります。実行時チェックは `DCHECK` を使用してください。

10. **メモリ割り当てや副作用を伴う `constexpr` 関数**  
    - `constexpr` は定数式評価のみに限定されるため、内部で動的割り当てや副作用を持つコードは避けてください。

11. **大きなキャプチャを持つ `std::function`**  
    - ヘッジ上のコールバックとして `base::OnceCallback`, `base::RepeatingCallback` など軽量なものを優先し、ヒープ使用量を抑えてください。

12. **グローバルまたはクラス固有の `operator new/delete` オーバーロード**  
    - これらのオーバーロードは禁止されており、Chromium のアロケータ API を利用してください。

これらの制限により、Chromium プロジェクト全体でコードの一貫性・パフォーマンス・プラットフォーム互換性を保つことができます。

2026/01/24 5:27

**Chromium で禁止されている C++ 機能** 1. **`goto`** - `goto` 文は使用しないでください。制御フローが追跡しづらくなるためです。 2. **`setjmp` / `longjmp`** - これらの非ローカルジャンプは例外安全性を破壊するため、禁止されています。 3. **C++ 標準ライブラリの例外** - `std::exception` や `std::runtime_error` などの標準例外を投げたり捕捉したりしないでください。代わりに Chromium のエラーハンドリング機構を利用してください。 4. **非トリビアルデストラクタ付きの `new` / `delete`** - スマートポインタ (`std::unique_ptr`, `std::shared_ptr`) やスタック割当てを優先し、複雑なクリーンアップが必要な生の動的メモリは禁止です。 5. **`malloc` / `free`** - C 風の割り当て関数ではなく、Chromium のメモリアロケータ(例:`base::Malloc`, `new`/`delete`)を使用してください。 6. **`std::mutex` と関連スレッドプリミティブ** - Chromium コードベースは独自のスレッド安全抽象 (`base::Lock`, `base::WaitableEvent`) を用いるため、標準ライブラリのミューテックスは避けてください。 7. **`thread_local` ストレージ期間** - C++11 の `thread_local` ではなく、Chromium のスレッドローカルユーティリティ(`THREAD_LOCAL`)を使用してください。 8. **C++ RTTI (ランタイム型情報)** - RTTI を無効化 (`-fno-rtti`)し、`dynamic_cast`, `typeid` は使わないでください。Chromium の型識別メカニズムを利用しましょう。 9. **コンパイル時に評価できない `static_assert`** - すべての `static_assert` はコンパイル時に解決可能な式である必要があります。実行時チェックは `DCHECK` を使用してください。 10. **メモリ割り当てや副作用を伴う `constexpr` 関数** - `constexpr` は定数式評価のみに限定されるため、内部で動的割り当てや副作用を持つコードは避けてください。 11. **大きなキャプチャを持つ `std::function`** - ヘッジ上のコールバックとして `base::OnceCallback`, `base::RepeatingCallback` など軽量なものを優先し、ヒープ使用量を抑えてください。 12. **グローバルまたはクラス固有の `operator new/delete` オーバーロード** - これらのオーバーロードは禁止されており、Chromium のアロケータ API を利用してください。 これらの制限により、Chromium プロジェクト全体でコードの一貫性・パフォーマンス・プラットフォーム互換性を保つことができます。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

要約

Chromium は、コードベースで使用できる C++ 言語機能とライブラリ機能を指定する詳細なスタイルガイドを採用しています。機能は 許可済み(allowed)、禁止(banned)、または 未定(TBD)に分類され、サポート対象となる各標準ごとに設定されています:C++11/14/17 は一般的に許可されており、C++20 は 2023 年 11 月 13 日に追加され、包括的な allow/block/TBD テーブルが提供されています。C++23 のサポートは 2026 年 1 月から開始し、C++26 はまだサポート対象外です。多くの Abseil コンポーネントは採用されていますが、Chromium 自身のユーティリティと重複するものや安全性に懸念があるもの(例:std::any、std::optional、乱数生成器などの早期バックポート)については禁止または TBD とされています。
禁止されている言語機能には、C++11 での inline namespace、long long、ユーザー定義リテラルが含まれます。C++17 では UTF‑8 文字リテラル、並列アルゴリズム、std::filesystem などが禁止または TBD とされています。
今後の作業としては、追加の C++23 機能を評価し、承認・禁止・TBD のいずれかに決定すること、および互換性が確認できた場合にはさらに Abseil モジュールを検討する可能性があります。
Chromium に貢献する開発者は、これらのルールがすべての新規コード追加およびサードパーティ統合に適用されるため、ABI の安定性、一貫したツールチェーン使用、および大規模な分散プロジェクト全体での安全性を確保することになります。

本文

Chromium C++ スタイルガイド – サポート機能の概要


全体像

  • 本ガイドは、最新のC++標準およびAbseilライブラリにおける新規・更新された言語/ライブラリ機能のサポート状況をまとめたものです。
  • Chromium 及びそのサブプロジェクトへ適用されますが、ツールチェーン上で必要な場合はサブプロジェクト側でより厳格に設定することもあります。

機能ステータス

標準デフォルト許可初期サポート日備考
C++11✔︎(以下の禁止機能を除く)
C++14✔︎
C++17✔︎(以下の禁止機能を除く)
C++20初期サポート (2023年11月13日)TBDリスト以下
C++23初期サポート (2026年1月)TBDリスト以下
C++26未対応
Abseil✔︎(禁止/TBD機能を除く)

一般ルール

  • 禁止機能:Chromiumコードでは使用不可。
  • 許可機能:自由に使用可能。
  • TBD機能:決定されるまで TBD リストに残す。
  • 第三者コードは内部で禁止機能を利用できても、Chrome がそれらを公開インタフェースとして露出させてはならない(安全な変換が行われた場合のみ許可)。

C++11 禁止言語機能

機能理由
inline namespace
inline namespace foo { … }
Google スタイルガイドで禁止。コンポーネントとの整合性が不明。
long long
long long var = value;
int64_t
を使用する方が望ましい。
ユーザー定義リテラル
DistanceType var = 12_km;
許可されていない。

C++11 禁止ライブラリ機能

ヘッダ/機能理由
<cctype>
,
<cwctype>
#include <cctype>
Cロケールに依存し、
unsigned char
を超える引数で未定義動作。Abseil の
<absl/strings/ascii.h>
を使用。
<cfenv>
/
<fenv.h>
#include <cfenv>
必要ない。プラットフォームヘッダを利用。
<chrono>
#include <chrono>
base/time
と重複。
<exception>
#include <exception>
例外は禁止。
ランダム生成器 (
<random>
)
std::mt19937
base/rand_util.h
を使用。
<ratio>
#include <ratio>
テンプレートが重く、Google スタイルガイドで禁止。
<regex>
#include <regex>
RE2 と重複。RE2 を利用。
std::aligned_storage
,
std::bind
,
std::function
例示あり
alignas
,
absl::Bind
等の代替を推奨。
std::shared_ptr
,
std::weak_ptr
std::make_shared<int>(10)
Chromium の
base::WeakPtr
を使用。
文字列変換関数 (
stoi
,
to_string
)
int x = std::stoi("10");
base/strings/string_number_conversions.h
を推奨。
スレッドサポートライブラリヘッダ (
<thread>
,
<mutex>
等)
#include <thread>
base/synchronization
と重複。Chromium の API を使用。

C++17 禁止言語機能

機能理由
UTF-8 文字リテラル (
u8'…'
)
char x = u8'x';
char8_t
は禁止。純粋な
char
を使用。

C++17 禁止ライブラリ機能

ヘッダ/機能理由
数学的特殊関数 (
std::beta
,
std::legendre
等)
std::beta()
必要ない。
並列アルゴリズム (
std::execution::par
)
std::find(std::execution::par, …)
Libc++ のサポートが不完全。Chrome のスレッド API を使用。
std::aligned_alloc
std::aligned_alloc(1024, 1024)
プラットフォーム固有のアロケータを優先。
std::any
,
std::byte
,
std::filesystem
例示ありChromium の等価機能を使用、または回避。
<span>
#include <span>
base::span
を推奨。

C++20 許可言語機能

  • 省略関数テンプレート (
    auto
    パラメータ,
    C auto
    , 変数長
    auto...
    )
  • consteval
    関数
  • 概念と制約(例:
    Hashable
  • デフォルト比較 (
    operator== = default; operator<=> = default;
    )
  • 設計子イニシャライザ (
    S s{ .y = 3 };
    )
  • 属性テスト (
    __has_cpp_attribute(assume)
    )
  • constinit
    変数
  • ビットフィールドイニシャライザ
  • ラベル付きリカバリキャプチャ付きラムダ
  • 機能テストマクロ (
    #if !defined(__cpp_modules) || (__cpp_modules < 201907L) …
    )
  • [[likely]]
    ,
    [[unlikely]]
    属性
  • 初期化子付き range‑for 文(C++23 前)
  • 三項比較演算子 (
    <=>
    )
  • 列挙型宣言の using

C++20 許可ライブラリ機能

ヘッダ理由
<bit>
ビット操作ユーティリティ。
<compare>
三項比較をサポート。
<concepts>
有用な概念を提供。
Ranges アルゴリズム (
std::ranges
)
範囲ベースの処理。
<version>
機能テストマクロ。
<numbers>
数学定数。
std::assume_aligned
ポインタ整列ヒント。
std::erase_if
,
std::erase
コンテナ操作。
std::hardware_destructive_interference_size
偽共有を避ける。
std::is_bounded_array
,
std::is_unbounded_array
型特性。
std::lerp
線形補間。
std::make_obj_using_allocator
,
std::make_unique_for_overwrite
,
std::midpoint
アロケータユーティリティ。
std::ranges::subrange
範囲ビュー。
std::remove_cvref_t
修飾子除去。
std::ssize
コンテナの符号付きサイズ。
std::basic_string::starts_with
,
ends_with
文字列ヘルパー。

C++20 禁止言語機能

  • char8_t
    :純粋な
    char
    を優先。
  • モジュール (
    export module …
    ) – Clang/GN で未サポート。
  • [[no_unique_address]]
    – Chromium の
    NO_UNIQUE_ADDRESS
    マクロを使用。

C++20 禁止ライブラリ機能

ヘッダ/機能理由
<bind_front>
std::bind_front(minus, 50)
absl::bind_front
と重複。
std::bit_cast
std::bit_cast<long>(number)
base::bit_cast
を使用。
UTF‑8 変換関数 (
<c8rtomb>
,
<mbrtoc8>
)
例示コードCロケールに依存し、回避すべき。
Ranges ファクトリ/アダプタ(
iota_view
,
transform
等)
パイプライン例Chromium の範囲ユーティリティを優先。
std::to_address
std::to_address(numbers.begin())
base::to_address
を使用。
<syncstream>
#include <syncstream>
マルチスレッドストリームは不要。

C++20 TBD 言語機能

  • 構造体の括弧付き集約初期化 (
    B b2(1, 1);
    ) – 潜在的な問題点。
  • コルーチン (
    co_return
    等) – 大規模サポートが必要。

C++20 TBD ライブラリ機能

  • <coroutine>
    ,
    <format>
    ,
    <source_location>
    ,
    <u8string>
    などはまだ統合されていない。

C++23 許可言語機能

  • 新しいプリプロセッサディレクティブ:
    #elifdef
    ,
    #elifndef
    .

C++23 許可ライブラリ機能

機能理由
std::basic_string::contains
if (str.contains("foo")) …
サブストリングチェックが簡潔。
std::byteswap
auto x = std::byteswap(y);
バイトオーダー操作。
std::to_underlying
auto x = std::to_underlying(enum_val);
列挙型を基底型へ変換。

C++23 TBD 言語機能

  • 明示的オブジェクトパラメータ (
    void f(this S& self)
    )
  • 多次元添字演算子
  • Auto キャスト (
    auto(x)
    )
  • [[assume]]
    属性、
    #warning
    ディレクティブ、リテラルサフィックス、名前付き文字エスケープ – 全てレビュー待ち。

C++23 TBD ライブラリ機能

  • オプションモナド操作
    and_then
    ,
    transform
    ,
    or_else
  • <expected>
    , フラットコンテナ (
    flat_map
    等)
  • <out_ptr>
    ,
    <inout_ptr>
  • 多次元配列ビュー (
    <mdspan>
    )
  • Ranges 変換 (
    std::ranges::to
    )、フォーマットユーティリティ、スタックトレース、ムーブオンリー関数、到達不能ヒント、spanstream、固定幅浮動小数点、ライフタイムヘルパー。

Abseil 禁止ライブラリ機能

機能理由
absl::any
,
absl::optional
C++17 のバックポート標準 (
std::any
,
std::optional
) を優先。
absl::AnyInvocable
,
absl::move_only_function
Chromium コールバックと重複Chromium のコールバック型を使用。
属性マクロ(例:
ABSL_ATTRIBUTE_LIFETIME_BOUND
クロスプラットフォーム属性Chromium 等価を優先。
Btree コンテナ (
btree_map
, など)
性能上の問題標準ライブラリコンテナを使用。
absl::bind_front
std::bind_front
と重複
Chromium の
base::Bind
を利用。
コマンドラインフラグ (
ABSL_FLAG
)
フラグ処理Chromium のフラグシステムを使用。
固定配列 (
absl::FixedArray
)
未初期化の UB リスク
base/types/fixed_array.h
を利用。
ロギングマクロ(
LOG
,
CHECK
等)
Chromium のロギングと重複Chromium のロギングを使用。
absl::NoDestructor
デストラクタ抑制
base::NoDestructor
を使用。
Nullability アノテーション (
absl_nonnull
)
強制力なし避けるべき。
absl::StatusOr
base::expected
と重複
Chromium のエラーハンドリングを優先。
absl::string_view
, 文字列ユーティリティ(例:
StrCat
,
StrJoin
std::string_view
、Chromium 文字列と重複
標準または Chromium 等価を使用。
同期プリミティブ (
absl::Mutex
)
Chromium の同期プリミティブと重複Chromium を利用。
時間ライブラリ (
absl::Duration
など)
Chromium 時間型と重複Chromium 時間型を優先。
バリアントユーティリティ (
absl::variant
,
bad_variant_access
)
標準バリアントへのエイリアス標準ライブラリを使用。
ユーティリティ関数(
apply
,
exchange
など)
標準に対するエイリアス標準ライブラリを利用。

Abseil TBD 機能

  • リンクドハッシュコンテナ (
    absl::linked_hash_set
    ,
    absl::linked_hash_map
    )
    挿入順保持のセット/マップを提供しますが、現在は TBD リストにあり評価待ちです。

機能ステータスの更新手順

  1. 提案
    cxx@chromium.org
    に簡潔な説明と根拠をメールで送信。
  2. 議論:関連スレッドやドキュメントへのリンクを添付。
  3. コードレビュー:合意に達したらこのファイルの変更レビューを提出。
  4. TBD リスト管理:初期サポート後 2 年間 TBD のままの場合は、明示的に許可/禁止リストへ移行。

同じ日のほかのニュース

一覧に戻る →

2026/01/24 10:00

**27ブランドから325車種へ対応したオープンソース自動運転**

## Japanese Translation: 提供された要約は正確で網羅的かつ明瞭であるため、変更の必要はありません。 --- **元の要約:** Comma Four は、オープンパイロットプラットフォームを利用した高度なドライバーアシスタンス機能を車両に提供する AI 主導型アップグレードです。トヨタ・ヒュンダイ・フォードなど 27 社の 325 台以上の車に追加でき、広範なモデルでテストされ、人間の入力を最小限に抑えて数時間動作可能であることが示されています。オープンパイロットの実証済み自律走行機能を基盤とし、Comma Four は自動運転技術の業界全体への普及へ向けた一歩を表します。同社はユーザーにコミュニティ参加と将来の自律システム形成への貢献を呼びかけつつ、プロダクト開発・自律工学・運用部門での採用も積極的に行っています。広く展開されれば、このアップグレードは多ブランドのドライバーアシスト機能の導入を加速し、自動車技術分野で新たなキャリアパスを創出する可能性があります。

2026/01/19 17:03

**現代のプログラミングで実践しているC++習慣** 1. **説明的な変数名を使う** - 単一文字の識別子は避け、意図が伝わる名前を選ぶ。 2. **不変データには `const` と `static const` を優先する** - 変更されないことを保証し、コンパイラ最適化を促進する。 3. **RAII(Resource Acquisition Is Initialization)パターンを採用する** - リソースの取得と解放をオブジェクトに閉じ込めることでリークを防止。 4. **必要に応じてヘッダーオンリ―ライブラリを利用する** - コンパイル依存性が減り、ビルド時間が短縮される。 5. **型推論には `auto` を使う** - 複雑なイテレータ型を簡潔にしつつ可読性を保つ。 6. **モダンなコンテナ初期化子を活用する** - `std::vector<int> v{1, 2, 3};` は手動の `push_back` よりも明確で簡潔。 7. **Catch2 や Google Test のようなフレームワークで単体テストを書く** - コードの正しさを保証し、リファクタリングを容易にする。 8. **関数は短く、目的を絞る** - 単一責任原則を目指すことで保守性が向上する。 9. **Doxygen コメントでドキュメント化する** - クリーンで検索可能な API ドキュメントを自動生成できる。 10. **最適化はプロファイル後に行う** - ホットスポットを測定し、実際のパフォーマンスボトルネックに対処する。

## Japanese Translation: 作者は主にC#とPythonで作業していますが、バインディングやニッチなタスクのために依然としてC(またはC++)を使用します。これは細粒度の制御を提供するからです。Cには公式のスタイルガイドラインがないため、ブログ、Rust、および完璧主義的マインドセットから引き出した個人的な習慣を構築しています。 新しいプロジェクトでは、GCC/Clang/MSVCサポート付き**C23**を好み、`#if CHAR_BIT != 8 #error` を強制して8ビットの `char` を保証します。彼らは簡潔な typedef のセット(`u8`, `i8`, `i16`, `u16`, `i32`, `u32`, `u64`, `f32`, `f64`, `uptr`, `isize`, `usize`)を採用し、<stdbool.h> からの C23 の `bool` をブール値に使用します。 ヌル終端文字列を避けるために、彼らは **長さ+データ構造**(`String` に `u8 *data; isize len`)を使用します。「parse, don’t validate」に触発されてオープックタイプと信頼できるコンストラクタ(Lelenthran のブログ参照)を作成しています。C23 のタグ互換性により、マクロ (`Tuple2(T1,T2)`) を使って単純なタプルを定義できますが、名前付き構造体は必要です。 エラーハンドリングは **sum types** でモデル化されています:列挙型とそれに伴う構造体(`ErrorCode`, `SafeBuffer`, `MaybeBuffer`)が戻り値に成功または失敗を符号化します。作者は純粋な C では動的メモリ割り当てを意図的に避け、ヒープ重視のコードには Rust または C# を好みます;アレーナアロケータも言及されますが使用されません。 標準ライブラリの使用は最小限です。文字列関数はほとんど使わず、代わりに生の `mem*` 呼び出しを優先します。また、OS API はエルゴノミクスが悪いため再実装されることがよくあります。作者は外部関数のドキュメントを注意深く読むことを強調し、将来的により安全なメモリ取り扱いのために **「slice」タイプ** を追加することを検討しています。 全体として、この記事は読者が自分自身の C スタイルガイドラインを作成するよう奨励しつつ、言語の強みと挫折の両方を認めています。

2026/01/20 0:06

**Go言語が1万5000行を削減** --- ### 概要 Goプログラミング言語は、最近の更新で約 **150万行(LOC)** のコードを削除し、コードベースの大幅な縮小を実現しました。これはコミュニティが言語をシンプルに保ち、保守性を向上させるために継続的に取り組んでいる結果です。 ### 主なポイント - **削減規模** - コアパッケージとツール全体で約1,500,000行が削除されました。 - **動機** - 現在の使用状況に合わなくなった重複コードやレガシーコードを排除する。 - 保守性を簡素化し、コンパイル時間を短縮し、可読性を向上させる。 - **開発者への影響** - 廃止予定の機能に対してわずかなAPI変更が加えられました。 - よりシンプルになったコードベースを反映したドキュメントが更新されました。 - **今後の展望** - ミニマリズムとパフォーマンスへの継続的な注力。 - 言語をさらに洗練させるため、コミュニティからの貢献を奨励しています。 ### 結論 Goプロジェクトが半百万行に及ぶ削減を意図的に実施したことは、世界中の開発者に対して明瞭性・効率性・長期的持続可能性へのコミットメントを示すものです。

## Japanese Translation: ``` ## Summary 著者はQuaminaにUnicode文字プロパティ正規表現の堅牢なサポートを構築し、`[~p{L}~p{Zs}~p{Nd}]`という構文を使用しました。 Goの標準ライブラリが最新のUnicodeバージョン(15.0対17.0)に追いついていないため、Quaminaは独自のデータを維持する必要がありました。著者は `UnicodeData.txt` を取得し、フィールド1と3を解析してすべての37カテゴリとそれらの補集合の範囲をリスト化したコードを生成しました—結果として従来の775K行アプローチに比べ5,122行のGoコードのみで済みました。 初期は、すべてのオートマタを事前計算しコードへ直列化すると約12Mのデータが生成され、起動時に長時間停止したりIDEがクラッシュする問題が発生しました。実行時キャッシュ戦略に切り替えることで、Quaminaは初回使用時にUnicodeプロパティオートマタを計算し保持できるようになりました。この変更で追加速度が135/秒から4,330/秒へ(30倍)向上しました。マッチング性能も高いままであり、UTF‑8の短さと浅いオートマタのおかげで数十万〜百万メッセージ/秒を処理できます。 著者は日常的な作業にGenAIツールを使用することを検討しましたが、ツール不足・時間制約・そのようなサービスのビジネス実現性への懐疑心から控えています。次の主要機能は数値量指定子サポート(例:`a{2-5}`)であり、これによりQuaminaの正規表現機能が完結します。この成功を受けてQuamina 2.0の安定リリースが計画されています。生活上の誘惑が勢いを鈍らせましたが、不確実性があるものの今後の開発は奨励されます。 ```

**Chromium で禁止されている C++ 機能** 1. **`goto`** - `goto` 文は使用しないでください。制御フローが追跡しづらくなるためです。 2. **`setjmp` / `longjmp`** - これらの非ローカルジャンプは例外安全性を破壊するため、禁止されています。 3. **C++ 標準ライブラリの例外** - `std::exception` や `std::runtime_error` などの標準例外を投げたり捕捉したりしないでください。代わりに Chromium のエラーハンドリング機構を利用してください。 4. **非トリビアルデストラクタ付きの `new` / `delete`** - スマートポインタ (`std::unique_ptr`, `std::shared_ptr`) やスタック割当てを優先し、複雑なクリーンアップが必要な生の動的メモリは禁止です。 5. **`malloc` / `free`** - C 風の割り当て関数ではなく、Chromium のメモリアロケータ(例:`base::Malloc`, `new`/`delete`)を使用してください。 6. **`std::mutex` と関連スレッドプリミティブ** - Chromium コードベースは独自のスレッド安全抽象 (`base::Lock`, `base::WaitableEvent`) を用いるため、標準ライブラリのミューテックスは避けてください。 7. **`thread_local` ストレージ期間** - C++11 の `thread_local` ではなく、Chromium のスレッドローカルユーティリティ(`THREAD_LOCAL`)を使用してください。 8. **C++ RTTI (ランタイム型情報)** - RTTI を無効化 (`-fno-rtti`)し、`dynamic_cast`, `typeid` は使わないでください。Chromium の型識別メカニズムを利用しましょう。 9. **コンパイル時に評価できない `static_assert`** - すべての `static_assert` はコンパイル時に解決可能な式である必要があります。実行時チェックは `DCHECK` を使用してください。 10. **メモリ割り当てや副作用を伴う `constexpr` 関数** - `constexpr` は定数式評価のみに限定されるため、内部で動的割り当てや副作用を持つコードは避けてください。 11. **大きなキャプチャを持つ `std::function`** - ヘッジ上のコールバックとして `base::OnceCallback`, `base::RepeatingCallback` など軽量なものを優先し、ヒープ使用量を抑えてください。 12. **グローバルまたはクラス固有の `operator new/delete` オーバーロード** - これらのオーバーロードは禁止されており、Chromium のアロケータ API を利用してください。 これらの制限により、Chromium プロジェクト全体でコードの一貫性・パフォーマンス・プラットフォーム互換性を保つことができます。 | そっか~ニュース