Having not heard any objections, here’s a patch which does this: https://bugs.webkit.org/show_bug.cgi?id=176984 <https://bugs.webkit.org/show_bug.cgi?id=176984>
> On Sep 13, 2017, at 12:49, JF Bastien <jfbast...@apple.com> wrote: > > > >> On Sep 13, 2017, at 11:07, Maciej Stachowiak <m...@apple.com >> <mailto:m...@apple.com>> wrote: >> >> >> >>> On Sep 13, 2017, at 8:11 AM, JF Bastien <jfbast...@apple.com >>> <mailto:jfbast...@apple.com>> wrote: >>> >>> Hello WebCritters, >>> >>> I’m moving some code around, and one particular header I have is included >>> everywhere in JSC so I’d like it to be lightweight and include as few other >>> headers as possible. It unfortunately uses WTF::Vector, but it only does so >>> as a pointer: >>> >>> void ohNoes(Vector<Noms>*); >>> >>> It seems like something a forward declaration would fix nicely, and oh joy >>> and wonder we have Forward.h just for this! Here’s what it does: >>> >>> template<typename T, size_t inlineCapacity, typename OverflowHandler, >>> size_t minCapacity, typename Malloc> class Vector; >>> >>> That’s nice and great for T, but all the other template parameters are SOL >>> because Vector is actually declared with default template parameters: >>> >>> template<typename T, size_t inlineCapacity = 0, typename OverflowHandler = >>> CrashOnOverflow, size_t minCapacity = 16, typename Malloc = FastMalloc> >>> class Vector : private VectorBuffer<T, inlineCapacity, Malloc> { >>> >>> The extra painful thing is that, contrary to what I originally thought, one >>> cannot declare Vector in Forward.h and then define it in Vector.h with the >>> same defaults twice! Ideally the compiler would just yell at a mismatch, >>> but instead it says error: template parameter redefines default argument >>> (thanks clang, that’s exactly what I’m trying to do, just tell me if you >>> catch a mismatch and ODR away otherwise). >>> >>> Here’s what I propose: >>> >>> Change the forward declaration in Forward.h to contain the default template >>> parameters (and forward-declare CrashOnOverflow). >>> Remove these default template parameters from Vector.h. >>> Include Forward.h in Vector.h. >>> Optionally, if the WebCritters think it useful, leave a comment just above >>> the Vector definition redirecting to Forward.h for defaults (or more fancy, >>> use size_t inlineCapacity /*=0*/ style like LLVM’s codebase does, and have >>> a tool that checks for consistency). >>> Optionally, try to fix C++20 so this isn’t A Thing anymore. Note that my >>> hopes are low because of modules (why fix it if modules will magically make >>> this not a thing). >>> >>> Alternatively, I could just include Vector.h and be done with it. >>> >>> Thoughts? >> >> Is there anything in Forward.h that should not be included everywhere you >> include Vector.h, whether for efficiency or any other reasons? That's the >> only potential thing I can think of that may be wrong with this plan. In >> that case, the simple fix would be to have a separate VectorForward.h which >> can be included by both. > > I thought about that, and it seems like Forward.h is so tiny that it > shouldn’t be an issue. If it ever starts including other WTF things then we > should definitely do what you say, but I don’t think we should at the moment. > Or put another way, if Forward.h doesn’t purely forward-declare things then > it’s doing it wrong. :-) > > _______________________________________________ > webkit-dev mailing list > webkit-dev@lists.webkit.org > https://lists.webkit.org/mailman/listinfo/webkit-dev
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev