From e2e2e4a6fb54029d03d8017103d15f6f871973fb Mon Sep 17 00:00:00 2001 From: John Maddock Date: Tue, 20 Apr 2010 17:26:06 +0000 Subject: [PATCH] Tweak VC10 configuration settings. Update BOOST_NO_DECLTYPE test with VC10 bug case. [SVN r61432] --- include/boost/config/compiler/visualc.hpp | 11 +++++----- test/boost_no_decltype.ipp | 25 +++++++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/include/boost/config/compiler/visualc.hpp b/include/boost/config/compiler/visualc.hpp index f8cc1096..46c9ef0b 100644 --- a/include/boost/config/compiler/visualc.hpp +++ b/include/boost/config/compiler/visualc.hpp @@ -159,31 +159,30 @@ #if _MSC_VER < 1600 #define BOOST_NO_AUTO_DECLARATIONS #define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_DECLTYPE #define BOOST_NO_LAMBDAS #define BOOST_NO_RVALUE_REFERENCES #define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_NULLPTR #endif // _MSC_VER < 1600 // C++0x features not supported by any versions -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T #define BOOST_NO_CONCEPTS #define BOOST_NO_CONSTEXPR #define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DECLTYPE #define BOOST_NO_DELETED_FUNCTIONS #define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_EXTERN_TEMPLATE #define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_NULLPTR #define BOOST_NO_RAW_LITERALS #define BOOST_NO_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_TEMPLATE_ALIASES #define BOOST_NO_UNICODE_LITERALS #define BOOST_NO_VARIADIC_TEMPLATES - // // prefix and suffix headers: // diff --git a/test/boost_no_decltype.ipp b/test/boost_no_decltype.ipp index c712e892..f76db77e 100644 --- a/test/boost_no_decltype.ipp +++ b/test/boost_no_decltype.ipp @@ -1,3 +1,4 @@ + // (C) Copyright Beman Dawes 2008 // Use, modification and distribution are subject to the @@ -12,10 +13,34 @@ namespace boost_no_decltype { +struct test_class +{ + test_class() {} +}; + +test_class get_test_class() +{ + return test_class(); +} + +template +void baz(F f) +{ + // + // Strangely VC-10 deduces the return type of F + // to be "test_class&". Remove the constructor + // from test_class and then decltype does work OK!! + // + typedef decltype(f()) res; + res r; +} + int test() { int i; decltype(i) j; + decltype(get_test_class()) k; + baz(get_test_class); return 0; }