Я полагаю, что любой компилятор, который поддерживает их сейчас, будет продолжать поддерживать их в обозримом будущем как необязательные расширения, чтобы люди могли компилировать свой существующий код.
Определенно ни одной бессонной ночи ни на одной из кодовых баз, с которыми я работал за последние 5-6 лет. Я не думаю, что когда-либо встречал кого-нибудь, кто использовал бы export
, плюс такие эксперты, как Херб Саттер, так долго выступали против спецификаций исключений (кроме nothrow), что большинство программистов уже поняли это сообщение.
Я, конечно, не пролью слезу по поводу спецификации исключений. ("Хорошая идея, которая, к сожалению, не сработала.") Все, на что они когда-либо были годны, это то, что сейчас обозначает noexcept
.
Но я надеялся, что export
появится. По крайней мере, export
позволит вам изменять вспомогательные функции для шаблонов без необходимости перекомпилировать весь код, использующий эти шаблоны. И это избавило бы нас от всех этих пространств имен detail
:
namespace detail { // actually we don't want this public, but can't avoid it
template<typename T>
void f_helper() { /*---*/ }
}
template<typename T>
void f() {detail::f_helper();}
void g() {f<int>();} // has to recompile if f_helper()'s implementation changes
Увы, поскольку только один из компиляторов, которыми мне приходилось пользоваться в последнее десятилетие, реализовал это, я так и не смог его использовать.
экспорт
никогда не был реализован должным образом в gcc или MSVC (но, по-видимому, так было в EDG / Comeau, как говорится в комментариях), но я бы думаю, он так и не получил широкого признания. (Но я в основном живу в мире gcc / msvc, поэтому моя точка зрения не охватывает все сообщество C ++.)
Что касается спецификаций исключений, я считаю, что они тоже были нарушены.
В-третьих, отказ от поддержки не означает, что компилятор будет вызывать ошибки. Просто настоятельно рекомендуется, чтобы пользователь не использовал его и, если это применимо (не так много, я думаю), перейти к другим механизмам для достижения той же цели.
Я думаю, что оба приема хороши и ни один из них не причинит мне боли, и мне нравится разъяснение намерений в отношении noexcept
.
Я программировал на C ++ начиная с cfront 1.0, и я рад сообщить, что никогда не писал спецификации исключений и не допускал их в коде, который я был ответственным за. Когда им сделали предложение, я позвонил Бьярну Страуструпу по телефону и крикнул: «Не делай этого!» Я назвал все причины, по которым это была ужасная идея. К моему удивлению, он сказал что-то вроде: «Я знаю». Когда я спросил, почему особенность Hades была включена в спецификацию, он сказал, что есть крупный игрок, чьи «эксперты» решительно настаивали на том, чтобы она была включена в спецификацию, иначе они абсолютно не подпишут, точка, конец обсуждения . Если бы я когда-либо знал, кто это, я забыл.
Я уже давно отказываюсь от поддержки. : -)