diff --git a/docs/cpp-conformance-improvements-2017.md b/docs/cpp-conformance-improvements-2017.md index d9bbdc0886..7fa4793fbb 100644 --- a/docs/cpp-conformance-improvements-2017.md +++ b/docs/cpp-conformance-improvements-2017.md @@ -87,7 +87,7 @@ In Visual Studio 2015, the compiler erroneously treated copy-list-initialization ```cpp // From http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#1228 -struct MyList { +struct MyStore { explicit MyStore(int initialCapacity); }; @@ -275,6 +275,15 @@ static_assert(test1, "PASS1"); constexpr bool test2 = !IsCallable::value; static_assert(test2, "PASS2"); ``` +### Classes declared in anonymous namespaces +According to the C++ standard, a class declared inside an anonymous namespace has internal linkage, and therefore cannot be exported. In Visual Studio 2015 and earlier, this rule was not enforced. In Visual Studio 2017 the rule is partially enforced. The following example raises this error in Visual Studio 2017: "error C2201: 'const `anonymous namespace'::S1::`vftable'': must have external linkage in order to be exported/imported." + +```cpp +namespace +{ + struct __declspec(dllexport) S1 { virtual void f() {} }; //C2201 +} +``` ### Classes declared in anonymous namespaces According to the C++ standard, a class declared inside an anonymous namespace has internal linkage, and therefore cannot be exported. In Visual Studio 2015 and earlier, this rule was not enforced. In Visual Studio 2017 the rule is partially enforced. The following example raises this error in Visual Studio 2017: "error C2201: 'const `anonymous namespace'::S1::`vftable'': must have external linkage in order to be exported/imported."