C++ のテンプレートについて理論的な質問があります。
次のコードがあるとします。
struct C{
int val = 15;
};
struct B{
C c;
int k = 9;
};
struct A{
template<typename T, typename FType, FType T::* Field = nullptr>
void test(T& d){
if (Field != nullptr){
int a = d.*Field;
}
}
};
int main(int argc, char *argv[])
{
A a;
B be;
a.test<B, int, &B::c::val>(be);
//a.test<B, int, &B::k>(be);
}
問題は、 B::kにアクセスできるのに、なぜB::c::valフィールドにアクセスできないのですか? B::c::valもBのメンバーです。か否か?