Home » Developing U++ » U++ Developers corner » Error C2280 with MSC15 and Uniq (Error C2280 with MSC15 and Uniq (attempting to reference a deleted function))
Error C2280 with MSC15 and Uniq [message #47033] |
Wed, 16 November 2016 03:39 |
awksed
Messages: 66 Registered: April 2012
|
Member |
|
|
I'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;
}
bool Uniq::SendCmdLine(void)
{
// ok, we're (finally...) connected to client
// just get command line from him
Vector<String> v;
int count = ScanInt(ReadFileString(pipe));
for(int i = 0; i < count; i++)
v.Add(ReadFileString(pipe));
// This causes the following error:
// C:\upp\bazaar\Uniq\Windows.cpp(109): error C2280: 'Upp::Vector<Upp::String>::Vector(const Upp::Vector<Upp::String> &)': attempting to reference a deleted function
//
PostCallback(callback1(WhenInstance, v));
Is there a compiler switch to stop generated functions from being deleted or what changes need to be made the the code?
Thanks,
Jan
|
|
|
|
|
Re: Error C2280 with MSC15 and Uniq [message #47036 is a reply to message #47033] |
Wed, 16 November 2016 23:25 |
|
mirek
Messages: 14039 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: Fri Sep 20 18:29:59 CEST 2024
Total time taken to generate the page: 0.03219 seconds
|