2012-08-28 2 views
4

템플릿 별명을 감안부분 전문화에 템플릿 별칭을 사용할 수 있습니까?

template<unsigned U> 
using uint_ = integral_constant<unsigned,U>; 

경고가 GCC와 발생하지 않는 반면 연타 3.1 template parameter can not be deduced 같은 경고를 발생

template<class T,class P> 
struct size{}; 

template <class T,unsigned U> 
struct size<T,uint_<U>>{}; 

로의 부분 특수화 4.7

그럼, 부적절한가요? ormed 코드?

+3

나는 그것이 작동해서는 안되는 이유는 없습니다. 별칭 템플릿은 즉시 대체됩니다. –

+0

clang 3.1에서는 경고를 표시 할뿐만 아니라 인스턴스화하려고 시도하면 특수화가 무시됩니다. 그러나 alias 대신 integral_constant를 사용하면 평소처럼 작동합니다. 나는 그것이 clang 버그라고 생각한다. – abir

+0

@abir : Clang에서 템플릿 별칭이 올바르게 구현되지 않았다는 의미입니다. – Nawaz

답변

5

코드는 C++ 11에서 완벽하게 훌륭합니다. Clang의 경고는 무시할 수 있습니다.

3

다른 사람이 이것이 Clang 버그라고 말했습니다. 당신은 분명히 연타가 제대로 유형-ID에 표시되는 템플릿 매개 변수의 신원을 업데이트하지 않습니다, 추측으로이

template<unsigned T, unsigned U = T> 
using uint_ = integral_constant<unsigned,U>; 

처럼 사용하여 선언을 변경하는 경우 당신은 주위를 작업 할 수 있습니다. 따라서 결과 유형 uint_<U>은 부분 전문화의 첫 번째 매개 변수를 나타냅니다 (uint_ 내에서 사용 지점에 있기 때문에). 또는 사용 시점에 주문을 교환 할 수 있습니다.

template <unsigned U,class T> 
struct size<T,uint_<U>>{}; 
관련 문제