type_traits und access modifiers
-
Guten Morgen
Ich habe unterschiedliches Verhalten der type_traits festgestellt. Gegeben sei folgendes Stück Code, womit man den Effekt testen kann:
#include <type_traits> class foo { private: foo() { } }; int main() { static_assert(std::is_default_constructible<foo>::value, "Nope."); return 0; }Das spannende ist hier natürlich, dass der Konstruktor von foo private ist. Nun ist es so, dass z.B. LLVM mir sagt, dass das nicht geht - Visual C++ (neuste Version 2013 CTP) hingegen findet schon und kompiliert das anstandslos.
Was ist nun richtig, und was sagt der Standard darüber? Ich konnte spontan nichts finden

Freundliche Grüsse
-
[...]has an accessible explicit or implicit default constructor.[...]
Von daher tipp' ich mal, dass MSVC der Bösewicht ist.
-
Gleich kommt Sone wieder an und flamet gegen den MSVC

-
Skym0sh0 schrieb:
Gleich kommt Sone wieder an und flamet gegen den MSVC

Gegen den C++-Compiler: Zu Recht.
-
Ich habe jetzt ne Weile im Standard rumgegurkt, aber nichts klares gefunden, bist auf:
20.11.4.3/6 schrieb:
Given the following function prototype:
template <class T> typename add_rvalue_reference<T>::type create();the predicate condition for a template specialization is_constructible<T, Args...> shall be satisfied
if and only if the following variable definition would be well-formed for some invented variable t:T t(create<Args>()...);is_default_constructable erfordert is_constructable. Und
T t(create<Args>()...);impliziert, dass man T auch ohne Argumente, also default konstruieren kann.