
On Sat, Mar 27, 2010 at 11:56 PM, Steven Watanabe <watanabesj@gmail.com> wrote:
<snip> template<typename T> struct has_contract_f_ { private: typedef char true_t; struct false_t { true_t dummy[2]; }; static T* make();
static false_t check(...); template<typename C> static true_t check(C*, typename C::template contract_f_<0>* = 0); public: static const bool value = sizeof(check(make())) == sizeof(true_t); // line 31 };
<snip>
Does it work if you pass 0 explicitly instead of using a default argument.
Unfortunately, it does not work (that is the first thing I tried...). If I change the `value` evaluation to: sizeof(check(make(), 0)) == sizeof(true_t); // line 31 Then `check(...)` is always called and `value` is always false. I _think_ because in this context 0 is always interpreted as a `int` instead of a pointer to `C::contract_f_<0>`. On Sat, Mar 27, 2010 at 10:55 PM, Jeffrey Hellrung <jhellrung@ucla.edu> wrote:
Compiles fine for me (MSVC9, Vista).
I have not tried the code on MSVC yet -- it's good it works on MSVC. I get the error with GCC/Ubuntu (what should the C++ ISO standard behavior be? error or not?).