[Update 2016-03-07: It appears that this was a bug in VS2015, and has been fixed in Update 2 RC]
In the process of upgrading Visual Studio 2012 to Visual Studio 2015, I encountered some brand new link errors that looked something like this:
error LNK2001: unresolved external symbol
"public: __cdecl FooData::FooData(struct FooData& const &)"
It’s not a new error in VS2015 — VS2012 can certainly produce it. I mean “new” in the sense that there were no problems linking this code when using the older compiler.
The struct in question looks vaguely like this:
struct FooData
{
int m_Bar;
volatile int m_Baz;
};
The problem is m_Baz. In C++14, the language was changed to say that structs are not trivially constructible if they have non-static volatile members. And that, I think, is why there’s no default copy constructor being generated. I can’t quote chapter and verse to back up that assertion, though.
[Update: Actually… maybe not? I’m beginning to wonder if VS2015 is doing the wrong thing here.]
But the fix is simple: add a copy constructor. And then, when the program fails to compile, declare a default constructor (because, of course, adding a copy constructor causes the implicit default constructor to be marked as deleted).
I found that developing an understanding of exactly what was happening and why to be the more difficult problem. Initially because the the compiler gave no indication that there was a problem at all, and willingly generated calls to a copy constructor that couldn’t possibly exist. Deeper than that, I’m still trying to piece together my own understanding of exactly why (and how) this change was made to the standard.
I think you’re looking for the following:
http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#496
Indeed, I had found that. But the more I look into it, the less sure I am that it rightly explains this link error.
Agreed that the issue as written doesn’t accurately express what’s in C++ today.
The main problem is that using volatile is correct in only a few instances. Is your usage one of the 3 documented here: http://wg21.link/n2016 ?