std::is_assignable
형질을 사용해야했습니다. 가장 오래된 컴파일러 버전에서는 사용할 수 없습니다. 나는 이것을 구현해야했기 때문에 (사실, 일부 interwebs가 엿보는 것을 인정한다.) 이것이 내 구현의 버그이거나 std::is_assignable
의 일반적인 문제인지 궁금하다.const 멤버가있는 구조체를 할당 할 수있는 이유는 무엇입니까?
첫째, 이것은 내 테스트 구조체입니다 :
struct Bar {
bool const cb; // this should kill the default assignment operator
int i;
};
여기 내 stdreplace::is_assignable
template <typename T> struct is_assignable : private std::__sfinae_types {
private:
template <typename T1>
static decltype(std::declval<T1>() = std::declval<T1>(),__one()) test(int);
template <typename T1>
static __two test(...);
public:
static bool const value = sizeof(test<T>(0)) == sizeof(__one);
};
그러나
, 그것은 나에게 말한다, Bar
가 할당입니다 :
int: 1
Bar: 1
int[2]: 0
문제가 어디에 있습니까?
부울 변수 이름을 예약 키워드 이외의 것으로 변경하려고 시도 했습니까? –
@pwny : 오 오. "Bar"구조체를 직접 입력했기 때문에 * 질문에 오타가 *되었습니다. 나는 ** 고마워 ** 질문을 정정했다! – bitmask
Hehe all good 나는 이것이 이상한 컴파일러 트릭이 아니라는 것을 확실히하고 있었다. –