Home » Developing U++ » U++ Developers corner » Error C2280 with MSC15 and Uniq (Error C2280 with MSC15 and Uniq (attempting to reference a deleted function))
Re: Error C2280 with MSC15 and Uniq [message #47036 is a reply to message #47033] |
Wed, 16 November 2016 23:25 |
|
mirek
Messages: 13980 Registered: November 2005
|
Ultimate Member |
|
|
awksed wrote on Wed, 16 November 2016 03:39I'm getting error C2280 (attempting to reference a deleted function) with MSC15 (pick() usually fixes most of these)
but there is a line in Uniq that is causing problems: PostCallback(callback1(WhenInstance, v));.
MSC15x64 compiler -Od switch
(no problem with MSC10x64)
Snippets:
class Uniq
{
// callback called when another app instance is run
//
Callback1<Vector<String> const &> WhenInstance;
}
PostCallback(callback1(WhenInstance, v));
Trouble is using callback1 here... You are trying to 'deep copy' v (because it needs to become the part of callback value), but v does not have copy... (it is 'deleted').
To pass v into callback1, you need to use 'clone' or 'pick'. Which is a bit of trouble without C++14, but in C++14 you can use lambda with explicit copy specification like:
CONSOLE_APP_MAIN
{
Event<const Vector<int>&> h = [](const Vector<int>& x) { DUMP(x); };
Event<> ev;
{
Vector<int> x = { 1, 2 };
ev = [=, x = pick(x)] { h(x); };
}
ev();
}
(this is in current trunk, upcoming 2016 release, but should work with Callback instead of Event too).
Alternatively, using
WithDeepCopy< Vector<String> > v;
would work too, with possible perfomance hit (if v is to be big)
[Updated on: Wed, 16 November 2016 23:25] Report message to a moderator
|
|
|
Goto Forum:
Current Time: Thu May 23 17:22:49 CEST 2024
Total time taken to generate the page: 0.01430 seconds
|