я не понимаю, почему в следующем коде, я позволил создать функцию print_private_template
в то время как компилятор жалуется print_private_class
:Частные классы шаблонов/Структура видимость
#include <cstdio>
class A
{
private:
template <unsigned T>
struct B
{
};
struct C
{
};
public:
template <unsigned T>
B<T> getAb()
{
return B<T>();
}
C getAc()
{
return C();
}
};
template<unsigned T>
void print_private_template(const A::B<T> &ab)
{
printf("%d\n", T);
}
void print_private_class(const A::C &ac)
{
printf("something\n");
}
int main(int, char**)
{
A a;
print_private_template(a.getAb<42>());
print_private_class(a.getAc());
return 0;
}
Является ли это ожидаемое поведение? ошибка/расширение компилятора?
Просто чтобы быть ясно, моя цель состоит в том, чтобы сделать ошибку компилятора на как использование print_private_template
и print_private_class
.
оба они вызывают ошибку компилятора в MSVC2008 – YeenFei