C++相談室 part166 (569レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
488
(1): デフォルトの名無しさん (ワッチョイ 06a1-6mIp) [sage] 2025/06/29(日) 10:59:10.19 ID:zQA4sk9y0(1/4) AAS
ちょっ質問なのですが
class Fooの中で構造体型PrivateStructがprivateな型として定義されており、
PrivateStruct型のFooのprivateなメンバFoo::m_stもある状況に対し、
Fooの外でauto&でもってPrivateStructの型を使用できて、
あまつさえFoo::m_stの値を読んだり書いたりできたりしてカプセル化神話が崩壊したんだけど
これっておま環?
(コード)
外部リンク:ideone.com
491
(1): デフォルトの名無しさん (ワッチョイ 06a1-6mIp) [sage] 2025/06/29(日) 13:14:06.51 ID:zQA4sk9y0(2/4) AAS
上のコードの
>auto& st = x.refStruct(); // stはFooのprivateな型だがビルドが通る。
が識別子PrivateStructの可視性を無視してくれる理由がわからんぬ……
これ
>PrivateStruct& st = x.refStruct();
と書いたら型の名前PrivateStructの可視性がprivateなのでもちろんエラーになる
492: デフォルトの名無しさん (ワッチョイ 06a1-6mIp) [sage] 2025/06/29(日) 13:18:58.11 ID:zQA4sk9y0(3/4) AAS
訂正orz
×: >PrivateStruct& st = x.refStruct();
○: >Foo::PrivateStruct& st = x.refStruct();
494
(2): デフォルトの名無しさん (ワッチョイ 06a1-6mIp) [sage] 2025/06/29(日) 13:59:10.64 ID:zQA4sk9y0(4/4) AAS
>識別子 PrivateStruct を使っていないから。
>この場合は x.refStruct() という式から型を推論するので型名 (であるような識別子) の可視性は関係ない。
なんで?
不完全な型の参照はエラーになるのだから
コンパイラは型推論の際Foo::PrivateStructという完全な型の情報まで突き止めているはず……
なんでFoo::PrivateStructの可視性を無視してくれるのや……
無視せずエラーにする言語仕様もあり得たはず
ていうかエラーにならないのがおま環でない証拠がいまのところ無い……
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s