diff --git a/src/core/DataTypes.h b/src/core/DataTypes.h
index 3ae37218d98be423b528991c762303b22c602cba..28fdf80c767dd5318e630c9f153337e33b226351 100644
--- a/src/core/DataTypes.h
+++ b/src/core/DataTypes.h
@@ -163,6 +163,8 @@ typedef double real_t;
 typedef float  real_t;
 #endif
 
+inline real_t operator"" _r( long double t ) { return static_cast< real_t >(t); }
+inline real_t operator"" _r( unsigned long long int t ) { return static_cast< real_t >(t); }
 template< typename T > inline real_t real_c  ( T t ) { return numeric_cast< real_t >(t); } ///< cast to type real_t using "real_c(x)"
 template< typename T > inline double double_c( T t ) { return numeric_cast< double >(t); } ///< cast to type double
 template< typename T > inline float  float_c ( T t ) { return numeric_cast< float > (t); } ///< cast to type float
diff --git a/tests/core/DataTypesTest.cpp b/tests/core/DataTypesTest.cpp
index 4250c8d333cd15d674e29991ff77ac4c79272908..569a57f811ed9f44f538bfe8e394ac85e6e73600 100644
--- a/tests/core/DataTypesTest.cpp
+++ b/tests/core/DataTypesTest.cpp
@@ -52,5 +52,9 @@ int main( int /*argc*/, char** /*argv*/ )
    WALBERLA_CHECK_EQUAL( math::int_ld<  2 >::exp, 1 );
    WALBERLA_CHECK_EQUAL( math::int_ld<  1 >::exp, 0 );
 
+   WALBERLA_CHECK_IDENTICAL(1.23456_r, real_c(1.23456));
+   WALBERLA_CHECK_IDENTICAL(1_r, real_c(1));
+   WALBERLA_CHECK_IDENTICAL(-1_r, real_c(-1));
+
    return EXIT_SUCCESS;
 }