
Howard Hinnant wrote:
On Dec 11, 2005, at 7:29 AM, Arkadiy Vertleyb wrote:
...
typedef std::binder1st< int > type2; // error
...
Are you sure you want to do things like this? The type int does not meet the requirements for these template parameters. For example in std::binder1st<Operation>, the requirements include:
1. Operation has a nested type named first_argument_type. 2. Operation has a nested type named second_argument_type. 3. Operation has a nested type named result_type.
It doesn't matter. The requirements don't apply unless binder1st<int> is instantiated, and it isn't in the above example. binder1st<int> is still incomplete unless it's used in a context that demands a complete type. Unless the compiler has a bug, the only explanation is nonstandard default arguments.