#ifndef _VN_UTIL_COMPILER_H #define _VN_UTIL_COMPILER_H // This header provides some simple checks for various features supported by the // current compiler. // The VN_HAS_RANGE_LOOP define indicates if the compiler supports range based // loops. // // for (auto i : _items) // cout << i << endl; // // HACK: Currently not checking the compiler and defaulting to no range loop support. #define VN_HAS_RANGE_LOOP 0 // The VN_SUPPORTS_SWAP define indicates if the compiler supports the swap // operation for STL items. // // [Example] // // #if VN_SUPPORTS_SWAP // queue empty; // _receivedResponses.swap(empty); // #else // while (!_receivedResponses.empty()) _receivedResponses.pop(); // #endif // #if (defined(_MSC_VER) && _MSC_VER > 1500) || (__cplusplus >= 201103L) #define VN_SUPPORTS_SWAP 1 #else #define VN_SUPPORTS_SWAP 0 #endif // The VN_SUPPORTS_INITIALIZER_LIST define indicates if the compiler supports // using an initialization list to initialize STL containers. // // [Example] // // #if VN_SUPPORTS_INITIALIZER_LIST // vector d({ &ez->_persistentData, &nd }); // #else // vector d(2); // d[0] = &ez->_persistentData; // d[1] = &nd; // #endif // #if (defined(_MSC_VER) && _MSC_VER <= 1600) || (__cplusplus < 201103L) #define VN_SUPPORTS_INITIALIZER_LIST 0 #else #define VN_SUPPORTS_INITIALIZER_LIST 1 #endif // The VN_SUPPORTS_CSTR_STRING_CONCATENATE define indictes if the compiler supports // concatenating a C-style string with std::string using the '+' operator. // // [Example] // // #if VN_SUPPORTS_CSTR_STRING_CONCATENATE // explicit permission_denied(std::string itemName) : runtime_error(std::string("Permission denied for item '" + itemName + "'.").c_str()) { } // #else // explicit permission_denied(std::string itemName) : runtime_error("Permission denied for item.") { } // #endif // #if (defined(_MSC_VER) && _MSC_VER <= 1600) #define VN_SUPPORTS_CSTR_STRING_CONCATENATE 0 #else #define VN_SUPPORTS_CSTR_STRING_CONCATENATE 1 #endif // Determine if the secure CRT and SCL are available. #if defined(_MSC_VER) #define VN_HAVE_SECURE_CRT 1 #define VN_HAVE_SECURE_SCL 1 #else #define VN_HAVE_SECURE_CRT 0 #define VN_HAVE_SECURE_SCL 0 #endif #endif