Okay, granted, I'm not a namespace master. I know they exist, I know they are helpful, but I'm not using them a lot myself, and I'm never too sure how I should write things like namespace cp = Clicker::process;
. I'm not completely sure whether going for using namespace ietf::http
within HttpServer class is smart or silly.
Anyway. I had code in a .cpp I wanted to extract into a .h, for it contained assert helpers that should now be used in more than one test program. Unfortunately, when I started using it in my new program, I got the linker complaining that some assert_bool()
function was defined in multiple .o files. That was the only one that was no template, unlike assert_equals()
and its children. I then foolishly wrapped the whole thing into a namespace /* anonymous */{
, so that things couldn't be reused in multiple areas.
But one instance of gcc got it wrong. You see, I'm not using that assert_bool() in all my .o, and that version of gcc, with its parano flags settings, thought it shouldn't keep going with dead code: assert_bool() wasn't used internally in that translation unit, and it couldn't be used from outside, as it was anonymous for the rest of the world.
What I should actually have done was to define the function "inline". Simply.
Tuesday, February 18, 2020
Don't send namespace do an inline job
Tags: cxx
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment