C++ 11 표준은 템플릿 조합에 대해 무엇이라고 말합니까? ((나는 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf에서 아무것도 찾을 수 있지만, 그주의 깊게 읽어하지 않았습니다.)C++의 템플릿 조합 11
을 나는
이template<typename T>
union u {
T a;
char b;
};
template<typename T>
u<T> make_u(T t) {
return { .a = t };
}
int main() {
return make_u<int>(1).a;
}
이 코드는 error: a designator into a template-dependent type is not allowed
, g++ -std=c++0x
이 error: expected primary-expression before ‘.’ token
말을 말을 icpc -std=c++11
원인이 있고, g++ -std=c++11
버전 4.8.0 (실험)) internal compiler error: in lookup_field_1, at cp/search.c:387
말하십시오. 나는 이것을 { .a = t }
을 t
으로 대체함으로써이 문제를 해결할 수 있습니다. 그러나 노조의 첫 번째 구성원이 아닌 분야에 대해서는이 작업을 수행 할 수 없습니다. 템플리트 화 된 유니온의 첫 번째 멤버가 아닌 다른 멤버를 선택하는 방법이 있습니까? 여기서 관련 멤버는 템플릿 종속적입니까? (물론 스택에 공용체를 선언하고 멤버를 원하는 값으로 설정할 수는 있지만 이니셜 라이저 목록이나 constexpr
함수에서는 수행 할 수 없습니다.)
템플릿 기반 통합에 대한 일반적인 질문 : http://stackoverflow.com/q/20743582/1147772 – Drax