재미있는 제목 죄송합니다.특성 클래스의 typedef에 익명 구조체
C++ 0x보다 먼저 함수 로컬 구조체 ("로컬 형식")를 템플릿 인수로 사용하는 경우 restrictions이 있습니다. 내 질문은 본질적으로 비슷한 제한이 익명 구조체에 적용되는 경우입니다. 구체적으로, 특성 클래스의 문맥에서 :
template <typename T>
struct trait;
template <>
struct trait<int> {
typedef int type;
};
template <typename T>
struct trait<std::basic_string<T> > {
typedef struct {
T value;
} type;
};
trait<std::string>::type foo; // Is this valid?
template <typename T>
void f() { }
f<trait<std::string>::type> >(); // Is this?
template <typename T>
void g() { f<typename trait<T>::type>(); }
g<std::string>(); // And this?
유효하고 신뢰할 만합니까? 그것은 GCC와 LLVM의 최신 버전에서 컴파일되지만 이것이 VC++와 ICC에 의해 이해되는지 여부는 여전히 정확하지 않은지 여전히 불안합니다.
질문 유형이 템플릿 인수로 사용되지 않았으므로이 유형이 로컬 유형에 대한 제한과 어떻게 관련이 있는지 잘 모르겠습니다. –
@Luc 예제를 추가하겠습니다. 그러나 문제는 그 자체로 나타납니다. 위 내용이 유효합니까? 그렇다면 템플리트 인수로 유효합니까? –
이제 익명 구조체의 인스턴스를 만들어 매개 변수로 사용하면 어떻게되는지 궁금합니다. (당신은'decltype'을 사용하여 그 타입을 얻을 수 있습니다) –