Przede wszystkim zwróć uwagę, że używam C++ 03 (i C++ 11 nie jest opcją). Używam doładowania koncepcję, aby sprawdzić, że pewna klasa default-constructible:Czy mogę sprawdzić, czy dana klasa * nie * jest domyślna?
BOOST_CONCEPT_ASSERT((boost::DefaultConstructible<my_class>));
Jednak dla innej klasy chciałbym twierdzić, że typ robi nie mieć konstruktora domyślnego. Czy jest sposób na zrobienie tego?
Aktualizacja: do wszystkich tych ekspertów super-duper znakowanie pytanie jako duplikat lub już odpowiedział bez czytania go: Oświadczam w akapicie pierwszym, że już wykorzystać doładowania koncepcję, aby sprawdzić, że zajęcia są default-constructible (co jest pytanie, które ma być duplikatem). Wyraźnie stwierdzam również, że nie mogę używać C++ 11, więc type_traits
nie są dla mnie dostępne. Więc, czy ktoś mógłby wskazać mi konkretną część, w której my pytanie "już odpowiedział"? Ponieważ jeszcze jej nie znalazłem.
jeśli masz dostęp do albo z TR1 lub przez rozszerzenie kompilatora, ma proste rozwiązanie. Również kompilator może mieć powiązaną funkcję wewnętrzną. (czyli VS2010 ma) –
i gdzieś cię straciłem, nie dodaje! w cytowanym wyrażeniu, czego szukasz? –
@BalogPal: O ile mogę powiedzieć z kodu, te twierdzenia nie działają, zwracając wartość prawdy dla dowolnej części wyrażenia parentetyzowanego. Zamiast tego w grę wchodzi wiele makr magii, ale sprowadza się to do kodu dla jakiejś funkcji, która nie będzie się kompilować, dopóki nie zostanie przyjęta dana koncepcja. Przekręcanie kodu, który nie kompiluje się w kompilowanie i vice versa, jest co najmniej trudne. – MvG