#ifndef __INSTANTIATE_@EXPERIMENT_TYPE@_AH__
  #define __INSTANTIATE_@EXPERIMENT_TYPE@_AH__

// Use this indirect variant of experiment instantiation if your experiment.hpp
// includes generated headers (e.g., protobuf message definitions) that are not
// guaranteed to exist when the aspect is woven.

// You need to provide the implementation of this function in your experiment
// directory:
void instantiate@EXPERIMENT_TYPE@();
// The experiment needs to be instantiated dynamically (on the stack, or the
// heap), as the ExperimentFlow destructor deregisters from the
// CoroutineManager which may not exist anymore if the global
// construction/destruction order is inappropriate.

aspect @EXPERIMENT_TYPE@ExperimentHook {
	advice execution ("void fail::SimulatorController::initExperiments()") : after () {
		instantiate@EXPERIMENT_TYPE@();
	}
};

#endif // __INSTANTIATE_@EXPERIMENT_TYPE@_AH__
