ノードに 2 つの子があるか、ラベル付きの葉である二分木に従うことを検討してください。このコードは g++ 4.7.2 でコンパイルされます。
#include <memory>
using namespace std;
struct Tree {
unique_ptr<Tree> left, right;
char label;
Tree(char label) : label(label) {}
Tree(Tree && left, Tree && right) :
left(new Tree(move(left))),
right(new Tree(move(right))) {}
//~ explicit Tree(Tree && left, bool right) {}
} tree {{1, 2}, 3};
明示的なコンストラクターのコメントを外すと、コンパイルに失敗します (この明示的なコンストラクターがプライベートの場合も失敗します)。これはgccのバグですか、それとも明示的なコンストラクターは、同じ数の引数を持つ非明示的なものの初期化子リスト構築の使用を禁止していますか?
編集: s/implicit/non-explicit/. 混乱して申し訳ありませんが、「暗黙的な変換を許可する」という意味で「暗黙的」という言葉を使用し、「明示的なキーワードでマークされている」という意味で「明示的」という言葉を使用しました。コンパイラによって自動的に生成されたコンストラクターを「デフォルト」と呼んでいるので、「暗黙的」という言葉がそれほどあいまいになることに気づきませんでした。