|
Boost : |
Subject: [boost] [serialization] and [type traites]Problem with has_new_operator
From: Runar Undheim (R.Undheim_at_[hidden])
Date: 2009-06-29 07:46:32
I have a class that override two different new operators. This give an
"ambiguous call to overloaded function" error message in VisualC++2005.
Example on code that will give error:
class A {
public:
void* operator new(std::size_t);
void* operator new(std::size_t, void*);
};
int _tmain(int argc, _TCHAR* argv[])
{
boost::has_new_operator<A>();
return 0;
}
I think that the has_new_operator could be updated with a new check_sig3
test. Where the new(std::size_t, void*) is moved to the new check_sig3.
The serialization code use the has_new_operator to decide if it should
call T::new or ::new. But what should happen if only the operation new
for arrays is overridden? If T::new function only should be called when
the operator new(size_t) is overridden then the has_new_operator
function should be split into three different functions (ex.
has_new_operator, has_new_operator_array and has_new_operator_placement)?
- Runar
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk