コンストラクタのテンプレート引数の控除は、C++ 0xにはありますか(ある時点ではC++ 0xでしたか?コンストラクタのテンプレート引数の控除
std::lock_guard l(m); // at 7:00
std::thread t(f); // at 9:00
これは委任make_foo
関数テンプレートが最終的に冗長であることを意味しています:An Overview of the Coming C++ (C++0x) Standardで、私は次の行を見ましたか?
コンストラクタのテンプレート引数の控除は、C++ 0xにはありますか(ある時点ではC++ 0xでしたか?コンストラクタのテンプレート引数の控除
std::lock_guard l(m); // at 7:00
std::thread t(f); // at 9:00
これは委任make_foo
関数テンプレートが最終的に冗長であることを意味しています:An Overview of the Coming C++ (C++0x) Standardで、私は次の行を見ましたか?
テンプレート引数の減算は、コンストラクタを含むすべての関数で機能します。しかし、コンストラクタに渡される引数からクラステンプレートパラメータを推論することはできません。そして、いいえ、 C++ 0xでもそれを行うことはできません。
struct X
{
template <class T> X(T x) {}
};
template <class T>
struct Y
{
Y(T y) {}
};
int main()
{
X x(3); //T is deduced to be int. OK in C++03 and C++0x;
Y y(3); //compiler error: missing template argument list. Error in 03 and 0x
}
lock_guard
とthread
はクラステンプレートではありません。彼らはコンストラクタテンプレートを持っています。
あなたの投稿は2011年ですが、C++ 1yがすぐに更新するはずです:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3836.html lookページのN3602ページ(http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3602.html)を参照してください。 – daminetreg
私はクラステンプレートのコンストラクタをクラスのコンストラクタテンプレートと混同していると思います...まだ興味深い質問、methinksです。 – fredoverflow