I ended up doing a process of elimination that come down to changing: int idx = MAX(0, MIN(lua::opt<int>(L, 2, 0), SLAB_MAX_RENDER_TARGETS)); to int idx = MAX(0, lua::opt<int>(L, 2, 0)); I'm trying to revert right now to get it to work. Will post back when I'm done. In particular, there were a few definitions of MIN floating around and I want to track down exactly which one was used. wes On Mon, Sep 20, 2010 at 1:57 PM, Ian Lance Taylor <iant@xxxxxxxxxx> wrote: > Wesley Smith <wesley.hoke@xxxxxxxxx> writes: > >> The problem is that when I go to use it in a .cpp file, the symbol for >> this function is U (undefined) instead of W (weak) as it should be. >> For example, I have a couple of .cpp files that use the exact same >> code, just changing the class T the template is based on. In all but >> 1 of the .o files resulting, the symbol is W. What's strange is that >> I'm compiling these files with exactly the same flags. > > Can you show us a standalone test case? > > Ian >