**タイトル:** C++26:オックスフォード可変長コンマ  

---

議論は、C++26で提案されている *オックスフォード可変長コンマ* に焦点を当てています。  
これは、パック展開の後に任意の末尾カンマを許容するものです。  

### 現状(C++20)
パック展開 (`f(x...)`) の直後には末尾カンマが認められていません。

### 提案された変更点
末尾カンマを許可し、例えば `f(x...,)` と書くことができるようにすることで、  
読みやすさの向上と差分(diff)作業の容易化を図ります。

#### 主なメリット
- 末尾カンマが許容されている他の文脈との一貫性が取れる。  
- パラメータリストを出力するコード生成ツールが簡素化できる。  
- 前行を編集せずに新しい要素を追加しやすくなる。

#### 考慮すべき懸念点
- 既存の文法規則との相互作用と後方互換性への影響。  
- コンパイラ実装時の複雑さ。  
- パック展開内でのコンマ演算子との曖昧さが生じる可能性。

委員会はトレードオフを検討し、最終的なC++26仕様に反映する前にコミュニティからのフィードバックを求めています。

2026/03/11 16:27

**タイトル:** C++26:オックスフォード可変長コンマ --- 議論は、C++26で提案されている *オックスフォード可変長コンマ* に焦点を当てています。 これは、パック展開の後に任意の末尾カンマを許容するものです。 ### 現状(C++20) パック展開 (`f(x...)`) の直後には末尾カンマが認められていません。 ### 提案された変更点 末尾カンマを許可し、例えば `f(x...,)` と書くことができるようにすることで、 読みやすさの向上と差分(diff)作業の容易化を図ります。 #### 主なメリット - 末尾カンマが許容されている他の文脈との一貫性が取れる。 - パラメータリストを出力するコード生成ツールが簡素化できる。 - 前行を編集せずに新しい要素を追加しやすくなる。 #### 考慮すべき懸念点 - 既存の文法規則との相互作用と後方互換性への影響。 - コンパイラ実装時の複雑さ。 - パック展開内でのコンマ演算子との曖昧さが生じる可能性。 委員会はトレードオフを検討し、最終的なC++26仕様に反映する前にコミュニティからのフィードバックを求めています。

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

要約

Japanese Translation:

(欠落していた詳細を追加)

要約

C++26 は、ellipsis‑only 関数宣言構文(

void foo(int...);
)を非推奨にし、標準的なカンマ区切り形式(
void foo(int, ...);
)と単独の ellipsis 形式(
void f(...);
)は残すことになります。この変更は提案 P3176R1(「Oxford variadic comma」)の一部であり、C の互換性を向上させ、テンプレートパラメータパックとの混乱を減らし、将来の言語拡張に余地を残すことを目的としています。

現在は両方の形式が許可されています:C 互換の

void foo(int, ...);
と、一部の古いコードでまだ使用されている legacy ellipsis‑only 形式です。C ではカンマを省略できません(例:
int printf(char*, ...);
)。非推奨化は既存プログラムを壊すことはなく、コンパイラは単に ellipsis の前にカンマを追加するか、警告を出すだけで済みます。

曖昧さは

T...
が「1 つのパラメータに ellipsis を付けたもの」か「テンプレートパラメータパック」を表す可能性があるため生じます(例:
void g(auto... args)
void g(auto args...)
)。現在最も奇妙な構文である
void h(auto......);
は、パラメータパックに ellipsis を付けた形です。

非推奨化後の推奨される C 互換形式は次のとおりです。

  • void f(int, ...);
  • void g(auto args, ...);
  • template<class T> void h(T, ...);

開発者はレガシーヘッダーをこれらの形式に更新し、コンパイラ警告を回避し、コードを将来にわたって安全に保つべきです。

本文

C++26は言語に小さくても意味のある整理をもたらします。具体的には、先頭にカンマが付いていないエリプシスパラメータ(

...
)を非推奨とする変更です。この提案(P3176R1)は、C との互換性を高め、混乱を減らし、将来の言語機能への道を開くことを目的としています。

提案名は「オックスフォード・カンマ」にちょっとしたジョークが込められています。英語でリストの最後に置かれるカンマ(“and” の前)と同様に、関数パラメータ内のエリプシスの前にもカンマを必ず入れることを求めるものです。

問題点

まず用語を整理しましょう。ここで扱っているのは、

printf
などで使われる C スタイルの可変長パラメータ(エリプシスパラメータ)です。テンプレートパックとは別物でありながら、両者とも
...
を用います。

現在、C++ではエリプシスパラメータを宣言する方法が2つあります。

void foo(int, ...);   // カンマ付き(C 互換)
void foo(int...);     // カンマなし(C++ 専用)

後者は標準化前の C++ の関数プロトタイプに由来し、以降も標準化された C++ に残っています。興味深いことに、C ではカンマを省略することが許されていません。C89 から変わらない規格は次のように定めています。

// C で有効なのはこの形だけ:
int printf(char*, ...);

C++ は後に C 互換性のためカンマ付き形式を追加しましたが、旧構文も残しておくことで後方互換性を保っています。その結果

(int, ...)
は両言語で有効ですが、
(int...)
は C++ のみで使用できます。

なぜ混乱するのか?

本当の混乱は C++11 で導入されたテンプレートパラメータパックに起因します。次の例を見てください。

template<class Ts>
void f(Ts...); // 正しい:型 Ts のパラメータ + エリプシスパラメータ

多くの人は

(T...)
をパラメータパックと結びつけがちですが、実際には
Ts
という単一パラメータに続いてエリプシスパラメータがある構造です。パラメータパックを宣言するには次のようにします。

template<class... Ts>
void f(Ts... args); // args はパラメータパック

さらに、簡略化された関数テンプレートで混乱は増します。

// 簡易可変長関数テンプレート
void g(auto... args);

// 簡易非可変長関数テンプレート(エリプシスパラメータ付き)
void g(auto args...);

二つの宣言は見た目が似ていますが、意味は全く異なります。後者は非推奨にするべきです。

6 ドットの奇妙なケース

現在の規則で許される最も奇妙な構文は次のようになります。

void h(auto......); // (auto..., ...) と同等

これは連続した 6 個のドットです(数え間違えていない限り)。関数テンプレートパラメータパックにエリプシスパラメータが続く形ですが、すべてのドットが

auto
に適用されるように見えるため誤解を招きます。

非推奨になるもの

C++26 では先頭にカンマが付いていないエリプシスパラメータを非推奨とします。

// C++26で非推奨:
void f(int...);
void g(auto args...);
template<class T> void h(T...);  // T はパラメータパックではない

// 推奨(C 互換):
void f(int, ...);
void g(auto args, ...);
template<class T> void h(T, ...);

独立したエリプシスパラメータは有効なままです。

void f(...); // 有効、C 互換、曖昧さなし

影響

これは純粋に非推奨(削除は以前から拒否されていた)であり、既存コードが不正になることはありません。非推奨の使用箇所はカンマを追加するだけで機械的に変換できます。この変換はツールによって自動化しやすい単純なものです。

影響を受けるコード量は正確には不明ですが、著者は GitHub の検索で

T......
パターンが数十件見つかったと報告しています。実際に該当する宣言の数は無視できないほどであり、
(T...)
がエリプシスパラメータかテンプレートパックかを判定するにはセマンティック解析が必要です。

この非推奨は将来の言語機能への道を開きます。すでに

(int...)
は P1219R2「同質可変長関数パラメータ」などの提案を妨げていました。このカンマなし形式を非推奨とすることで、委員会は将来の進化のためのデザインスペースを確保しつつ、C との一貫性を高め、混乱を減らしています。

結論

オックスフォード可変カンマは小さな変更ですが、多くのメリットがあります。C 互換性の向上、パラメータパックとの混同の削減、そして将来機能への設計余地の確保です。タイトルは遊び心があるものの、その動機は真剣であり、現代 C++ にほとんど役目を果たさない歴史的アーティファクトを整理することにあります。

エリプシスパラメータを使用しているなら、

...
の前に必ずカンマを入れるようにしましょう。そうすればコードはより C 互換になり、混乱が減り、次の機能に備えることができます。

同じ日のほかのニュース

一覧に戻る →

2026/03/16 4:12

「Chrome DevTools MCP」 (原文と同じく略語をそのまま使用します)

## Japanese Translation: **改訂要約** Chrome の MCP(Machine‑Code Processor)サーバーは、現在実行中の Chrome セッションに直接コーディングエージェントを接続できるようになり、新しいインスタンスを毎回起動する必要がなくなりました。 この機能を利用するには、`chrome://inspect#remote-debugging` でリモートデバッグを有効化し、MCP サーバーを `--autoConnect` フラグ付きで起動します(例:`gemini-cli --autoConnect --channel=beta`)。 エージェントがセッションを要求すると、Chrome は許可ダイアログを表示し、「Chrome is being controlled by automated test software」というバナーを表示します。エージェントはそのアクティブなセッションに対して Network や Elements などの DevTools パネルへアクセスできます。 MCP サーバーは依然として元々の起動方法をサポートしています:ユーザープロファイルの指定、リモートデバッグポート経由での接続、または隔離された一時プロファイルの実行。 サンプルワークフローは次のとおりです。リモートデバッグを有効化した後、エージェントプロンプトに「Check the performance of https://developers.chrome.com」と入力すると、MCP サーバーが接続し、ページを開き、パフォーマンストレースを取得します。 Chrome M144(Beta)で利用可能なこの機能は、デベロッパーが新しいセッションを開くことなく手動の DevTools 使用と AI 支援デバッグをシームレスに切り替えられるようにし、将来的に MCP を通じてコーディングエージェントへより多くの DevTools パネルデータを段階的に公開する基盤を整備します。

2026/03/16 6:22

カナダの法案 C‑22 は、カナダ国民への大量メタデータ監視を義務付けています。

## Japanese Translation: > Bill C‑22(Lawful Access Act)は、通信事業者および電子サービスプロバイダー(ESP)への法執行アクセスを拡大すると同時に、一部のプライバシー制限を強化します。従来のBill C‑2で広範な無証拠要求が認められていた点を置き換え、通信事業者に対しては「サービス確認」権限のみを限定的に付与します。他の加入者情報については、合理的根拠基準に基づく裁判所承認命令が必要となります。 > > 本法ではまた、Supporting Authorized Access to Information Act(SAAIA)も導入されます。この条項はBill C‑2の多くの要件を反映しつつ、GoogleやMetaなどのESPにも適用します。ESPはデバイス・機能テストへの協力、要求の秘密保持、および「コアプロバイダー」として指定される可能性があります。コアプロバイダーは、データ抽出ツールの開発・テスト・維持管理、監視装置の設置、当局への機能通知、そして特定メタデータ(例:送信ログ)を最大1年間保持する義務があります。ただし、**送信内容、ウェブ閲覧履歴、またはソーシャルメディア活動の保持を強制されることはありません**—この例外はシステム的脆弱性への対処に限定されています。 > > 監督はインテリジェンス・コミッショナーが承認した省令によって行われますが、多くの詳細は機密扱いとなっています。本法は、ブダペスト条約第二追加議定書や米国のCLOUD Actなどとの国際情報共有協力を改善することを目的としていますが、重大な市民権利懸念を提起し、通信事業者およびESPに大きなコンプライアンス負担を課す可能性があります。結果として、ユーザーの監視リスクが高まる恐れがあります。

2026/03/16 4:25

49 MB のウェブページ

## Japanese Translation: 記事は、現代のニュースサイトがデータ量の多いリクエストや侵入的な広告、トラッキングスクリプトで読者を過剰に負荷させていると主張し、滑らかな閲覧体験よりも収益を優先していることを指摘しています。 - **具体的証拠:** ニューヨーク・タイムズの記事1件が422のネットワークリクエスト、49 MBのデータを生成し、安定するまでに2分かかったと報告されています。2006年には同じページは1.5 Mbpsの接続で数分間停止していた(10曲分のMP3音源に相当)。 - **広告インフラ:** クライアント側のプログレマティックオークションがRubicon ProjectやAmazon Ad Systemsなどのエクスチェンジへ何十もの同時入札リクエストを送信し、膨大なJavaScript解析を要求します。 - **トラッキングペイロード:** 約5 MBのトラッキングスクリプトがPOSTビーコンをファーストパーティー端点(例: a.et.nytimes.com/track)やクロスサイトトラッカー(doubleclick.net、casalemedia)へ送信し、バックグラウンドでユーザー識別情報を構築します。IABの「purr」同意エンドポイントはページロード直後にこれらのスクリプトを即座に起動させるため、クッキーバナーはプライバシー保護ではなく法的シールドであることが示されています。 - **UX戦術:** パブリッシャーはCPMやビューアビリティ指標を読者体験よりも重視し、モーダルポップアップ、低コントラストの閉じアイコン、強制スクロール、自動再生のスティッキービデオ(CPU熱、バッテリー消費、Fitts法違反)や「Read More」ボタンで記事を切り捨て、追加広告をロードします。これらは広告iframeが遷移後に読み込まれる際にレイアウトシフト(CLS)を引き起こし、Google Core Web Vitalsの指標による離脱率を高めます。 - **モバイル問題:** モバイルニュースサイトはコンテンツに約11 %しかビューポートを割り当てず、狭いスリット状の表示領域がインタラクションコストを増大させます。 - **緩和策:** 非必須オーバーレイはスクロール深度≥50 %または60 秒滞在後に遅延し、モーダルキューを順序付け、アクセシブルで低侵襲のモーダルを使用し、非同期コンテンツ用スペースを確保してCLSを回避します。 - **代替案:** text.npr.org、lite.cnn.com、およびRSSフィードといった軽量フォーマットは、読者が余計な要素のないプライバシーフレンドリーなニュース消費を好むことを示し、広告中心のUIパラダイムに挑戦します。 **結果:** このまとめはすべての主要ポイントを完全に反映し、説明のない推測を避け、記事の主張を明確で読者フレンドリーな概要として提示しています。

**タイトル:** C++26:オックスフォード可変長コンマ --- 議論は、C++26で提案されている *オックスフォード可変長コンマ* に焦点を当てています。 これは、パック展開の後に任意の末尾カンマを許容するものです。 ### 現状(C++20) パック展開 (`f(x...)`) の直後には末尾カンマが認められていません。 ### 提案された変更点 末尾カンマを許可し、例えば `f(x...,)` と書くことができるようにすることで、 読みやすさの向上と差分(diff)作業の容易化を図ります。 #### 主なメリット - 末尾カンマが許容されている他の文脈との一貫性が取れる。 - パラメータリストを出力するコード生成ツールが簡素化できる。 - 前行を編集せずに新しい要素を追加しやすくなる。 #### 考慮すべき懸念点 - 既存の文法規則との相互作用と後方互換性への影響。 - コンパイラ実装時の複雑さ。 - パック展開内でのコンマ演算子との曖昧さが生じる可能性。 委員会はトレードオフを検討し、最終的なC++26仕様に反映する前にコミュニティからのフィードバックを求めています。 | そっか~ニュース