4

フォローした結果はどうなりますか?それは、不正な、未定義の動作ですか、それとも明確で整形式ですか?

struct A {};
std::pointer_traits<A> x;

私が尋ねる理由は、不思議なことに知りたいからであり、任意の型がポインターであるかどうかを知りたいからです。それで、shared_ptrと友達も含めるつもりです。そのための型特性(述語)があるかどうか、そうでない場合は、pointer_traitsを使用して、element_typeが宣言されているかどうかを検出できるかどうか疑問に思いました。

4

1 に答える 1

5

element_typeクラステンプレートのインスタンス化がなく、インスタンス化されていないため、20.6.3p1以降は形式が正しくありません

typedef 以下の element_type を参照してください。

タイプ: Ptr::element_type そのようなタイプが存在する場合。それ以外の場合、Ptr が形式のクラス テンプレートのインスタンス化である場合は T です。ここで、ArgsSomePointer<T, Args>は 0 個以上の型引数です。それ以外の場合、特殊化は ill-formedです。

于 2013-03-11T21:58:19.067 に答える