8u
問題は、書くか書かないかではありません8
。問題は、関数テンプレートのテンプレート パラメーターの型に関係しています。そのタイプは、 の宣言で使用されるものと一致する必要がありstd::bitset
ます。それsize_t
は標準によるものです(セクション23.3.5
)
namespace std {
template<size_t N> class bitset {
public:
// bit reference:
...
例外は、任意の整数型を使用できる配列次元です (もちろんbool
、受け入れることができる唯一のサイズです1
)。
// better size_t (non-negative), but other types work too
template<int N> void f(char(&)[N]);
しかし、型が一致しなければならない場合もあります。これは、自動推定されたテンプレート引数にのみ当てはまり、明示的に与えられたものには当てはまらないことに注意してください。その理由は、推定されたものの場合、コンパイラは実際のテンプレート引数とその呼び出しから推定したものとの間の最適な一致を見つけようとするためです。それ以外の多くの暗黙的な変換は許可されません。引数を明示的に指定すれば、あらゆる種類の変換を利用できます (私の主張を説明size_t
するために now を使用するという解決策は無視してください)。
template<int N> void foo(std::bitset<N> bs)
{ /* whatever */ }
int main() {
bitset<8> bar;
foo<8>(bar); // no deduction, but full range of conversions
}