制約付き API#
C++20 以降、oneAPI スレッディング・ビルディング・ブロック (oneTBB) API のほとんどは、テンプレート引数タイプに名前付き要件を適用するように制限されています。
これらの要件違反は、テンプレートのインスタンス化中のコンパイルで検出されます。
例
// body(oneapi::tbb::blocked_range) の呼び出しが不正な形式です。
// oneapi::tbb::parallel_for 呼び出しは制約エラーになります。
auto body = [](const int& r) {/*...*/};
oneapi::tbb::parallel_for(oneapi::tbb::blocked_range{1, 10}, body);
// Error の例:
// エラー: oneapi::tbb::parallel_for を呼び出すための一致する関数がありません
// 注: 制約が満たされていません
// 注: 必須の式 body(range) が無効です
body(range);警告
名前付き要件に違反して C++20 までは正常にコンパイルされるコードは、早期かつ厳密な制約診断のため、C++20 モードではコンパイルされない可能性があります。