diff --git a/GaudiKernel/src/Lib/StatusCode.cpp b/GaudiKernel/src/Lib/StatusCode.cpp index 9d85adeebe63ad4121f244955e0cf8770ab50e7e..2f2e7106f6584054483afc59dce188e91bfd469d 100644 --- a/GaudiKernel/src/Lib/StatusCode.cpp +++ b/GaudiKernel/src/Lib/StatusCode.cpp @@ -12,6 +12,10 @@ // statics bool StatusCode::s_checking( false ); +constexpr const StatusCode::ErrorCode StatusCode::SUCCESS; +constexpr const StatusCode::ErrorCode StatusCode::FAILURE; +constexpr const StatusCode::ErrorCode StatusCode::RECOVERABLE; + namespace { /// Default StatusCode category struct DefaultCategory : public StatusCode::Category { diff --git a/GaudiKernel/tests/src/test_StatusCode.cpp b/GaudiKernel/tests/src/test_StatusCode.cpp index 18766aedc5397b13dd1dc2fc56a8df4bd95f0490..2523d70a8a45b50d22e028f4e73cacccf6e3d8fc 100644 --- a/GaudiKernel/tests/src/test_StatusCode.cpp +++ b/GaudiKernel/tests/src/test_StatusCode.cpp @@ -407,3 +407,18 @@ BOOST_AUTO_TEST_CASE( conversions ) { // sc = 42; // no implicit conversion from int // int i = sc; // no implicit conversion to int } + +/// Function used for testing that the constants in @c StatusCode can be found +/// by constant references. +bool __attribute__( ( noinline ) ) +testReferencePassing( const StatusCode::ErrorCode& value, const StatusCode::ErrorCode& reference ) { + return ( value == reference ); +} + +BOOST_AUTO_TEST_CASE( const_definitions ) { + // Test whether the test can compile/link correctly when passing the + // constants in @c StatusCode into a function by constant reference. + BOOST_CHECK( testReferencePassing( StatusCode::SUCCESS, StatusCode::SUCCESS ) ); + BOOST_CHECK( testReferencePassing( StatusCode::FAILURE, StatusCode::FAILURE ) ); + BOOST_CHECK( testReferencePassing( StatusCode::RECOVERABLE, StatusCode::RECOVERABLE ) ); +}