我需要使用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
哪里有问题?
你有没有尝试改变你的布尔变量名称是别的而不是保留关键字? – 2012-02-24 05:26:13
@pwny:哦,男孩。这是在问题*中的拼写错误*,因为我手工输入了“Bar”结构。我纠正了这个问题,**谢谢**! – bitmask 2012-02-24 05:29:02
呵呵所有的好处我只是确保这不是一个奇怪的编译器技巧,因为这个。 – 2012-02-24 05:31:22