制約付き API

制約付き 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 モードではコンパイルされない可能性があります。