2011-10-17 4 views
2
template<class Int_T,class Integral,typename Best_Fit<Int_T>::type Min_Range, 
    typename Best_Fit<Int_T>::type Max_Range> 
auto operator+(Integral left,const Int<Int_T,Min_Range,Max_Range>& right) 
    ->Int<decltype(left + right.get_data())> 
{ 
    static_assert(std::is_integral<Integral>::value,"Non integral type is not allowed."); 
    static_assert(std::is_integral<Int_T>::value,"Non integral type is not allowed."); 
    auto data = left + right.get_data(); 
    Int<decltype(left + right.get_data())> result(data); 
    return result; 
} 

요점은 두 개의 static_assert * s *이 실행될 것입니다.
그럼이 Q에 대한 답은 무엇입니까?이 static_assert가 트리거됩니까?

+0

'Int'란 무엇입니까? –

+0

왜 그런지 보지 못 하겠지만 제약 조건을 만족하는 클래스를 만들 수는 있지만 ('Best_Fit'과'Int' - 그들이 무엇이든간에), is_integral'은 실패합니다 ... – Nim

+3

나는 그것이 불가능하다고 생각합니다. 누구든지 SFINAE – sehe

답변

0
std::string x; 
Int<int, 3, 5> i; 

auto z = x + i; 

트리거 됨.

+0

이상합니다. 나는'operator +'를 SFINAE에 선언하기 위해'decltype (left + right.get_data())를 기대했을 것입니다. 사실 GCC의 복사본에 대한 귀하의 발견을 재현 할 수 없습니다. –

+0

글쎄, 변환 할 수 있거나 'int'에 추가 할 수있는 유형을 사용해보십시오. 심지어 SFINAE가 도움이되지 않습니다. 예 : '이중 '. – Ayjay

+0

'std :: string'은 그런 타입이 아닙니다. –

1
struct dummy { 
    operator int() const 
    { return 0; } 
}; 

// Where rhs has appropriate type 
dummy() + rhs; 
관련 문제