тут, вроде уб: https://en.cppreference.com/w/cpp/language/extending_std
Как тогда сделать forward декларацию типа из std?
есть ощущение, что это не уб, т.к. это не расширение std, а просто fwd decl
Вот блин написано только что add declaration нельзя, а просто форвард ничего не сказано, поэтому и не понимаю
почему filesystem нормально не подключить?
Unless otherwise specified, the behavior of a C++ program is undefined if it adds declarations or definitions to namespace std or to a namespace within namespace std. (namespace.std-1) вот так звучит пункт стандарта, и я не вижу причин не считать forward declaration декларацией, поэтому полагаю, что это UB
Ну классно, а как мне сделать форвард декларацию?
Включить соответствующий заголовок.
Причина в том, что они не adds определения или объявления, поскольку объявления и определения эти уже там есть.
вы сейчас о сущностях говорите. да, они не добавляются. но стандарт таких уточнений не делает
Кстати, для некоторых классов и типов из STD есть заголовки, которые делают именно forward declaration
Но зачем?
forward — тоже decl )
В fstream так делают
так на реализации стандартной библиотеки такие ограничения не накладываются
а стандарт гарантирует, что path - это именно class, а не инстанс шаблонного класса или алиас?
Интересно, а header synopsis можно считать гарантом?
да http://eel.is/c++draft/library#res.on.headers-1
выходит, что гарантирует
Обсуждают сегодня