Skip to content

Commit

Permalink
add example violating one-definition-rule (odr)
Browse files Browse the repository at this point in the history
ref: #41
  • Loading branch information
digint committed Jun 25, 2024
1 parent 10749f3 commit 7999671
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 0 deletions.
62 changes: 62 additions & 0 deletions examples/violate-odr/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
PROJECT = odr

CXX = g++
LD = g++
RM = rm -f


SRC_DIRS = .
INCLUDE = -I ../../include

SRCS = $(wildcard $(addsuffix /*.cpp, $(SRC_DIRS)))
OBJS = $(SRCS:.cpp=.o)
DEPENDS = $(OBJS:.o=.d)

EXE = $(PROJECT)
MAP = $(PROJECT).map


#------------------------------------------------------------------------------
# flags
#

# commmon flags propagated to CFLAGS, CXXFLAGS, ASFLAGS (not LDFLAGS)
FLAGS += $(INCLUDE)
FLAGS += -MMD

CXXFLAGS = $(FLAGS)
CXXFLAGS += -std=c++11
CXXFLAGS += -fno-exceptions
CXXFLAGS += -fno-rtti

CXXFLAGS += -Wall -Wextra
CXXFLAGS += -Wctor-dtor-privacy
CXXFLAGS += -Wcast-align -Wpointer-arith -Wredundant-decls
CXXFLAGS += -Wshadow -Wcast-qual -Wcast-align -pedantic

LDFLAGS += -fno-exceptions
LDFLAGS += -fno-rtti


# Enable link-time optimizer
#CXXFLAGS += -flto
#LDFLAGS += -flto


.PHONY: all clean

all: $(EXE)

$(EXE): $(OBJS)
$(LD) $(OBJS) $(LDFLAGS) -o $(EXE)

%.o: %.cpp
$(CXX) -c $(CXXFLAGS) -o $@ $<

clean:
$(RM) *.o
$(RM) *.d
$(RM) $(EXE)


-include $(DEPENDS)
8 changes: 8 additions & 0 deletions examples/violate-odr/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
extern void init_one();
extern void init_two();

int main()
{
init_one();
init_two();
}
21 changes: 21 additions & 0 deletions examples/violate-odr/one.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include <iostream>

#include "tinyfsm.hpp"

struct One : tinyfsm::Fsm<One>
{
virtual void entry() {}
};

struct FirstState : One
{
void entry() override { std::cout << "entering Firstate of One" << std::endl; }
};

FSM_INITIAL_STATE(One, FirstState);


void init_one()
{
One::start();
}
21 changes: 21 additions & 0 deletions examples/violate-odr/two.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include <iostream>

#include "tinyfsm.hpp"

struct Two : tinyfsm::Fsm<Two>
{
virtual void entry() {}
};

struct FirstState : Two
{
void entry() override { std::cout << "entering Firstate of Two" << std::endl; }
};

FSM_INITIAL_STATE(Two, FirstState);


void init_two()
{
Two::start();
}

0 comments on commit 7999671

Please sign in to comment.