another_tuple_test_bench.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 165 行

CPP
165
字号
// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)//// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)// For more information, see http://www.boost.org//  another_test_bench.cpp  --------------------------------// This file has various tests to see that things that shouldn't// compile, don't compile.// Defining any of E1 to E5 or E7 to E11 opens some illegal code that // should cause the compliation to fail.#define BOOST_INCLUDE_MAIN  // for testing, include rather than link#include <boost/test/test_tools.hpp>    // see "Header Implementation Option"#include "boost/tuple/tuple.hpp"#include <string>#include <utility>using namespace std;using namespace boost;using namespace boost::tuples;template<class T> void dummy(const T&) {}class A {}; class B {}; class C {};// A non-copyable classclass no_copy {  no_copy(const no_copy&) {}public:  no_copy() {};};no_copy y;#ifdef E1tuple<no_copy> v1;  // should faild#endif#ifdef E2char cs[10];tuple<char[10]> v3;  // should fail, arrays must be stored as references#endif// a class without a public default constructorclass no_def_constructor {  no_def_constructor() {}public:  no_def_constructor(std::string) {} // can be constructed with a string};void foo1() {#ifdef E3  dummy(tuple<no_def_constructor, no_def_constructor, no_def_constructor>());   // should fail#endif}void foo2() {// testing default values#ifdef E4  dummy(tuple<double&>()); // should fail, not defaults for references  dummy(tuple<const double&>()); // likewise#endif#ifdef E5  double dd = 5;  dummy(tuple<double&>(dd+3.14)); // should fail, temporary to non-const reference#endif}// make_tuple ------------------------------------------   void foo3() {#ifdef E7    std::make_pair("Doesn't","Work"); // fails#endif    //    make_tuple("Does", "Work"); // this should work}// - testing element accessvoid foo4() {  double d = 2.7;   A a;  tuple<int, double&, const A&> t(1, d, a);  const tuple<int, double&, const A> ct = t;  (void)ct;#ifdef E8  get<0>(ct) = 5; // can't assign to const#endif#ifdef E9  get<4>(t) = A(); // can't assign to const#endif#ifdef E10  dummy(get<5>(ct)); // illegal index#endif}// testing copy and assignment with implicit conversions between elements// testing tie  class AA {};  class BB : public AA {};  struct CC { CC() {} CC(const BB& b) {} };  struct DD { operator CC() const { return CC(); }; };  void foo5() {    tuple<char, BB*, BB, DD> t;    (void)t;    tuple<char, char> aaa;    tuple<int, int> bbb(aaa);    (void)bbb;    //    tuple<int, AA*, CC, CC> a = t;    //    a = t;  }// testing tie// testing assignment from std::pairvoid foo7() {   tuple<int, int, float> a;#ifdef E11   a = std::make_pair(1, 2); // should fail, tuple is of length 3, not 2#endif    dummy(a);}// --------------------------------// ----------------------------int test_main(int, char *[]) {  foo1();  foo2();  foo3();  foo4();  foo5();  foo7();  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?