From 707d6f77990cd36cc5dc0cffeacc66fd326b1184 Mon Sep 17 00:00:00 2001 From: nobody Date: Wed, 6 Mar 2002 14:13:30 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'perforce_2_4_merge_1'. [SVN r13112] --- Jamfile | 16 -- static_assert.htm | 279 ---------------------------------- static_assert_example_1.cpp | 32 ---- static_assert_example_2.cpp | 40 ----- static_assert_example_3.cpp | 32 ---- static_assert_test.cpp | 86 ----------- static_assert_test_fail_1.cpp | 21 --- static_assert_test_fail_2.cpp | 23 --- static_assert_test_fail_3.cpp | 38 ----- static_assert_test_fail_4.cpp | 38 ----- static_assert_test_fail_5.cpp | 39 ----- static_assert_test_fail_6.cpp | 46 ------ static_assert_test_fail_7.cpp | 31 ---- static_assert_test_fail_8.cpp | 38 ----- static_assert_test_fail_9.cpp | 32 ---- 15 files changed, 791 deletions(-) delete mode 100644 Jamfile delete mode 100644 static_assert.htm delete mode 100644 static_assert_example_1.cpp delete mode 100644 static_assert_example_2.cpp delete mode 100644 static_assert_example_3.cpp delete mode 100644 static_assert_test.cpp delete mode 100644 static_assert_test_fail_1.cpp delete mode 100644 static_assert_test_fail_2.cpp delete mode 100644 static_assert_test_fail_3.cpp delete mode 100644 static_assert_test_fail_4.cpp delete mode 100644 static_assert_test_fail_5.cpp delete mode 100644 static_assert_test_fail_6.cpp delete mode 100644 static_assert_test_fail_7.cpp delete mode 100644 static_assert_test_fail_8.cpp delete mode 100644 static_assert_test_fail_9.cpp diff --git a/Jamfile b/Jamfile deleted file mode 100644 index 425de50..0000000 --- a/Jamfile +++ /dev/null @@ -1,16 +0,0 @@ -subproject libs/static_assert ; - - -unit-test static_assert_test : static_assert_test.cpp - : $(BOOST_ROOT) : ; - -unit-test static_assert_example_1 : static_assert_example_1.cpp - : $(BOOST_ROOT) : ; - -unit-test static_assert_example_2 : static_assert_example_2.cpp - : $(BOOST_ROOT) : ; - -unit-test static_assert_example_3 : static_assert_example_3.cpp - : $(BOOST_ROOT) : ; - - diff --git a/static_assert.htm b/static_assert.htm deleted file mode 100644 index 9661bd6..0000000 --- a/static_assert.htm +++ /dev/null @@ -1,279 +0,0 @@ - - - - - - -static assertions - - - - -

Header -<boost/static_assert.hpp>

- -

The header <boost/static_assert.hpp> supplies a single -macro BOOST_STATIC_ASSERT(x), which generates a compile time -error message if the integral-constant-expression -x is not true. In other words it is the compile time -equivalent of the assert macro; this is sometimes known as a -"compile-time-assertion", but will be called a "static -assertion" throughout these docs. Note that if the condition -is true, then the macro will generate neither code nor data - and -the macro can also be used at either namespace, class or function -scope. When used in a template, the static assertion will be -evaluated at the time the template is instantiated; this is -particularly useful for validating template parameters.

- -

One of the aims of BOOST_STATIC_ASSERT is to generate readable -error messages. These immediately tell the user that a library is -being used in a manner that is not supported. While error -messages obviously differ from compiler to compiler, but you -should see something like:

- -
Illegal use of COMPILE_TIME_ASSERTION_FAILURE<false>
- -

Which is intended to at least catch the eye!

- -

You can use BOOST_STATIC_ASSERT at any place where you can -place a declaration, that is at class, function or namespace -scope, this is illustrated by the following examples:

- -

Use at namespace scope.

- -

The macro can be used at namespace scope, if there is some -requirement must always be true; generally this means some -platform specific requirement. Suppose we require that int -be at least a 32-bit integral type, and that wchar_t be an -unsigned type. We can verify this at compile time as follows:

- -
#include <climits>
-#include <cwchar>
-#include <boost/static_assert.hpp>
-
-namespace my_conditions {
-
-BOOST_STATIC_ASSERT(sizeof(int) * CHAR_BIT >= 32);
-BOOST_STATIC_ASSERT(WCHAR_MIN >= 0);
-
-} // namespace my_conditions
-
- -

The use of the namespace my_conditions here requires -some comment. The macro BOOST_STATIC_ASSERT works by generating -an typedef declaration, and since the typedef -must have a name, the macro generates one automatically by -mangling a stub name with the value of __LINE__. When -BOOST_STATIC_ASSERT is used at either class or function scope -then each use of BOOST_STATIC_ASSERT is guaranteed to produce a -name unique to that scope (provided you only use the macro once -on each line). However when used in a header at namespace scope, -that namespace can be continued over multiple headers, each of -which may have their own static assertions, and on the "same" -lines, thereby generating duplicate declarations. In theory the -compiler should silently ignore duplicate typedef declarations, -however many do not do so (and even if they do they are entitled -to emit warnings in such cases). To avoid potential problems, if -you use BOOST_STATIC_ASSERT in a header and at namespace scope, -then enclose them in a namespace unique to that header.

- -

Use at function scope

- -

The macro is typically used at function scope inside template -functions, when the template arguments need checking. Imagine -that we have an iterator-based algorithm that requires random -access iterators. If the algorithm is instantiated with iterators -that do not meet our requirements then an error will be generated -eventually, but this may be nested deep inside several templates, -making it hard for the user to determine what went wrong. One -option is to add a static assertion at the top level of the -template, in that case if the condition is not met, then an error -will be generated in a way that makes it reasonably obvious to -the user that the template is being misused.

- -
#include <iterator>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits.hpp>
-
-template <class RandomAccessIterator >
-RandomAccessIterator foo(RandomAccessIterator from, RandomAccessIterator to)
-{
-   // this template can only be used with
-   // random access iterators...
-   typedef typename std::iterator_traits< RandomAccessIterator >::iterator_category cat;
-   BOOST_STATIC_ASSERT((boost::is_convertible<cat, const std::random_access_iterator_tag&>::value));
-   //
-   // detail goes here...
-   return from;
-}
- -

A couple of footnotes are in order here: the extra set of -parenthesis around the assert, is to prevent the comma inside the -is_convertible template being interpreted by the preprocessor as -a macro argument separator; the target type for is_convertible is -a reference type, as some compilers have problems using -is_convertible when the conversion is via a user defined -constructor (in any case there is no guarantee that the iterator -tag classes are copy-constructible).

- -

Use at class scope

- -

The macro is typically used inside classes that are templates. -Suppose we have a template-class that requires an unsigned -integral type with at least 16-bits of precision as a template -argument, we can achieve this using something like this:

- -
#include <climits>
-#include <boost/static_assert.hpp>
-
-template <class UnsignedInt>
-class myclass
-{
-private:
-   BOOST_STATIC_ASSERT(sizeof(UnsignedInt) * CHAR_BIT >= 16);
-   BOOST_STATIC_ASSERT(std::numeric_limits<UnsignedInt>::is_specialized
-                        && std::numeric_limits<UnsignedInt>::is_integer
-                        && !std::numeric_limits<UnsignedInt>::is_signed);
-public:
-   /* details here */
-};
-
- -

How it works

- -

BOOST_STATIC_ASSERT works as follows. There is class -STATIC_ASSERTION_FAILURE which is defined as:

- -
namespace boost{
-
-template <bool> struct STATIC_ASSERTION_FAILURE;
-
-template <> struct STATIC_ASSERTION_FAILURE<true>{};
-
-}
- -

The key feature is that the error message triggered by the -undefined expression sizeof(STATIC_ASSERTION_FAILURE<0>), -tends to be consistent across a wide variety of compilers. The -rest of the machinery of BOOST_STATIC_ASSERT is just a way to -feed the sizeof expression into a typedef. The use of a macro -here is somewhat ugly; however boost members have spent -considerable effort trying to invent a static assert that avoided -macros, all to no avail. The general conclusion was that the good -of a static assert working at namespace, function, and class -scope outweighed the ugliness of a macro.

- -

Test Programs

- -

The following test programs are provided with this library:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Test ProgramExpected to CompileDescription
static_assert_test.cppYesIllustrates usage, and should always - compile, really just tests compiler compatibility.
static_assert_example_1.cppPlatform dependent.Namespace scope test program, may compile - depending upon the platform.
static_assert_example_2.cppYesFunction scope test program.
static_assert_example_3.cppYesClass scope test program.
static_assert_test_fail_1.cppNoIllustrates failure at namespace scope.
static_assert_test_fail_2.cppNoIllustrates failure at non-template - function scope.
static_assert_test_fail_3.cppNoIllustrates failure at non-template class - scope.
static_assert_test_fail_4.cppNoIllustrates failure at non-template class - scope.
static_assert_test_fail_5.cppNoIllustrates failure at template class - scope.
static_assert_test_fail_6.cppNoIllustrates failure at template class - member function scope.
static_assert_test_fail_7.cppNoIllustrates failure of class scope - example.
static_assert_test_fail_8.cppNoIllustrates failure of function scope example.
static_assert_test_fail_9.cppNoIllustrates failure of function scope example (part 2).
- -
- -

Revised 27th Nov 2000

- -

Documentation © Copyright John Maddock 2000. Permission to -copy, use, modify, sell and distribute this document is granted -provided this copyright notice appears in all copies. This -document is provided "as is" without express or implied -warranty, and with no claim as to its suitability for any purpose.

- -

Based on contributions by Steve Cleary and John Maddock.

- -

Maintained by John -Maddock, the latest version of this file can be found at www.boost.org, and the boost -discussion list at www.yahoogroups.com/list/boost. -

- -

 

- -

 

- - diff --git a/static_assert_example_1.cpp b/static_assert_example_1.cpp deleted file mode 100644 index 2c7bdfd..0000000 --- a/static_assert_example_1.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// (C) Copyright Steve Cleary & John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include -#include -#include - -#if !defined(WCHAR_MIN) -#define WCHAR_MIN 0 -#endif - -namespace boost{ - -namespace my_conditions { -BOOST_STATIC_ASSERT(sizeof(int) * CHAR_BIT >= 32); -BOOST_STATIC_ASSERT(WCHAR_MIN >= 0); - -} // namespace my_conditions - -} // namespace boost - -int main() -{ - return 0; -} - - diff --git a/static_assert_example_2.cpp b/static_assert_example_2.cpp deleted file mode 100644 index 7254dc7..0000000 --- a/static_assert_example_2.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// (C) Copyright John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include -#include -#include -#include -#include - -template -RandomAccessIterator foo(RandomAccessIterator from, RandomAccessIterator to) -{ - // this template can only be used with - // random access iterators... - typedef typename std::iterator_traits< RandomAccessIterator >::iterator_category cat; - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - // - // detail goes here... - return from; -} - -int main() -{ - std::deque d; - std::list l; - foo(d.begin(), d.end()); // OK - //foo(l.begin(), l.end()); // error - return 0; -} - - - - - - diff --git a/static_assert_example_3.cpp b/static_assert_example_3.cpp deleted file mode 100644 index 842e39c..0000000 --- a/static_assert_example_3.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// (C) Copyright John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include -#include -#include - -template -class myclass -{ -private: - BOOST_STATIC_ASSERT(sizeof(UnsignedInt) * CHAR_BIT >= 16); - BOOST_STATIC_ASSERT(std::numeric_limits::is_specialized - && std::numeric_limits::is_integer - && !std::numeric_limits::is_signed); -public: - /* details here */ -}; - -myclass m1; // this should be OK -//myclass m2; // this should fail -//myclass m3; // and so should this - -int main() -{ - return 0; -} diff --git a/static_assert_test.cpp b/static_assert_test.cpp deleted file mode 100644 index 065bf7b..0000000 --- a/static_assert_test.cpp +++ /dev/null @@ -1,86 +0,0 @@ -// (C) Copyright Steve Cleary & John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include - -// -// all these tests should succeed. -// some of these tests are rather simplistic (ie useless) -// in order to ensure that they compile on all platforms. -// - -// Namespace scope -BOOST_STATIC_ASSERT(sizeof(int) >= sizeof(short)); -BOOST_STATIC_ASSERT(sizeof(char) == 1); - -// Function (block) scope -void f() -{ - BOOST_STATIC_ASSERT(sizeof(int) >= sizeof(short)); - BOOST_STATIC_ASSERT(sizeof(char) == 1); -} - -struct Bob -{ - private: // can be in private, to avoid namespace pollution - BOOST_STATIC_ASSERT(sizeof(int) >= sizeof(short)); - BOOST_STATIC_ASSERT(sizeof(char) == 1); - public: - - // Member function scope: provides access to member variables - int x; - char c; - int f() - { -#ifndef _MSC_VER // broken sizeof in VC6 - BOOST_STATIC_ASSERT(sizeof(x) >= sizeof(short)); - BOOST_STATIC_ASSERT(sizeof(c) == 1); -#endif - return x; - } -}; - - - -// Template class scope -template -struct Bill -{ - private: // can be in private, to avoid namespace pollution - BOOST_STATIC_ASSERT(sizeof(Int) > sizeof(char)); - public: - - // Template member function scope: provides access to member variables - Int x; - Char c; - template - void f(Int2 , Char2 ) - { - BOOST_STATIC_ASSERT(sizeof(Int) == sizeof(Int2)); - BOOST_STATIC_ASSERT(sizeof(Char) == sizeof(Char2)); - } -}; - -void test_Bill() // BOOST_CT_ASSERTs are not triggerred until instantiated -{ - Bill z; - //Bill bad; // will not compile - int i = 3; - char ch = 'a'; - z.f(i, ch); - //z.f(i, i); // should not compile -} - -int main() -{ - test_Bill(); - return 0; -} - - - diff --git a/static_assert_test_fail_1.cpp b/static_assert_test_fail_1.cpp deleted file mode 100644 index a80fdfe..0000000 --- a/static_assert_test_fail_1.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// (C) Copyright Steve Cleary & John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include - -// -// all these tests should fail: -// - -// Namespace scope -BOOST_STATIC_ASSERT(sizeof(int) == sizeof(char)); // will not compile - - - - - diff --git a/static_assert_test_fail_2.cpp b/static_assert_test_fail_2.cpp deleted file mode 100644 index 45d292d..0000000 --- a/static_assert_test_fail_2.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// (C) Copyright Steve Cleary & John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include - -// -// all these tests should fail: -// - -// Function (block) scope -void f() -{ - BOOST_STATIC_ASSERT(sizeof(int) == sizeof(char)); // should not compile -} - - - - diff --git a/static_assert_test_fail_3.cpp b/static_assert_test_fail_3.cpp deleted file mode 100644 index 4031e27..0000000 --- a/static_assert_test_fail_3.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// (C) Copyright Steve Cleary & John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include - -// -// this tests should fail: -// - -struct Bob -{ - private: // can be in private, to avoid namespace pollution - BOOST_STATIC_ASSERT(sizeof(int) == sizeof(char)); // will not compile - public: - - // Member function scope: provides access to member variables - int x; - char c; - int f() - { -#ifndef _MSC_VER // broken sizeof in VC6 - BOOST_STATIC_ASSERT(sizeof(x) == 4); - BOOST_STATIC_ASSERT(sizeof(c) == 1); -#endif - //BOOST_STATIC_ASSERT((sizeof(x) == sizeof(c))); // should not compile - return x; - } -}; - - - - - diff --git a/static_assert_test_fail_4.cpp b/static_assert_test_fail_4.cpp deleted file mode 100644 index 83dd5d1..0000000 --- a/static_assert_test_fail_4.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// (C) Copyright Steve Cleary & John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include -#include - -// -// all these tests should fail: -// - - -struct Bob -{ - public: - - // Member function scope: provides access to member variables - int x; - char c; - int f() - { -#ifndef BOOST_MSVC // broken sizeof in VC6 - BOOST_STATIC_ASSERT(sizeof(x) == 4); - BOOST_STATIC_ASSERT(sizeof(c) == 1); - BOOST_STATIC_ASSERT((sizeof(x) == sizeof(c))); // should not compile -#endif - return x; - } -}; - - - - - diff --git a/static_assert_test_fail_5.cpp b/static_assert_test_fail_5.cpp deleted file mode 100644 index afef667..0000000 --- a/static_assert_test_fail_5.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// (C) Copyright Steve Cleary & John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include - -// -// all these tests should fail: -// - -// Template class scope -template -struct Bill -{ - private: // can be in private, to avoid namespace pollution - BOOST_STATIC_ASSERT(sizeof(Int) == 4); - BOOST_STATIC_ASSERT(sizeof(Int) == sizeof(Char)); // should not compile when instantiated - public: - - // Template member function scope: provides access to member variables - Int x; - Char c; - template - void f(Int2 , Char2 ) - { - BOOST_STATIC_ASSERT(sizeof(Int) == sizeof(Int2)); - BOOST_STATIC_ASSERT(sizeof(Char) == sizeof(Char2)); - //BOOST_STATIC_ASSERT(sizeof(Int) == sizeof(Char)); // should not compile when instantiated - } -}; - -Bill b; - - - diff --git a/static_assert_test_fail_6.cpp b/static_assert_test_fail_6.cpp deleted file mode 100644 index 31a34bc..0000000 --- a/static_assert_test_fail_6.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// (C) Copyright Steve Cleary & John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include - -// -// all these tests should fail: -// - -// Template class scope -template -struct Bill -{ - private: // can be in private, to avoid namespace pollution - BOOST_STATIC_ASSERT(sizeof(Int) == 4); - //BOOST_STATIC_ASSERT(sizeof(Int) == sizeof(Char)); // should not compile when instantiated - public: - - // Template member function scope: provides access to member variables - Int x; - Char c; - template - void f(Int2 , Char2 ) - { - BOOST_STATIC_ASSERT(sizeof(Int) == sizeof(Int2)); - BOOST_STATIC_ASSERT(sizeof(Char) == sizeof(Char2)); - BOOST_STATIC_ASSERT(sizeof(Int) == sizeof(Char)); // should not compile when instantiated - } -}; - -void foo() -{ - int i = 0; - char c = 0; - Bill b; - // this should fail: - b.f(i, c); -} - - - diff --git a/static_assert_test_fail_7.cpp b/static_assert_test_fail_7.cpp deleted file mode 100644 index 5f8ba3e..0000000 --- a/static_assert_test_fail_7.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// (C) Copyright John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include -#include -#include - -template -class myclass -{ -private: - BOOST_STATIC_ASSERT(sizeof(UnsignedInt) * CHAR_BIT >= 16); - BOOST_STATIC_ASSERT(std::numeric_limits::is_specialized - && std::numeric_limits::is_integer - && !std::numeric_limits::is_signed); -public: - /* details here */ -}; - -myclass m2; // this should fail -myclass m3; // and so should this - -int main() -{ - return 0; -} diff --git a/static_assert_test_fail_8.cpp b/static_assert_test_fail_8.cpp deleted file mode 100644 index 41f3698..0000000 --- a/static_assert_test_fail_8.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// (C) Copyright John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include -#include -#include -#include -#include - -template -RandomAccessIterator foo(RandomAccessIterator from, RandomAccessIterator) -{ - // this template can only be used with - // random access iterators... - typedef typename std::iterator_traits< RandomAccessIterator >::iterator_category cat; - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - // - // detail goes here... - return from; -} - -int main() -{ - std::deque d; - std::list l; - foo(d.begin(), d.end()); // OK - foo(l.begin(), l.end()); // error - return 0; -} - - - - diff --git a/static_assert_test_fail_9.cpp b/static_assert_test_fail_9.cpp deleted file mode 100644 index 041e70d..0000000 --- a/static_assert_test_fail_9.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// (C) Copyright John Maddock 2000. -// Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org for most recent version including documentation. - -#include -#include -#include - -template -class myclass -{ -private: - BOOST_STATIC_ASSERT(sizeof(UnsignedInt) * CHAR_BIT >= 16); - BOOST_STATIC_ASSERT(std::numeric_limits::is_specialized - && std::numeric_limits::is_integer - && !std::numeric_limits::is_signed); -public: - /* details here */ -}; - -myclass m1; // this should be OK -//myclass m2; // this should fail -myclass m3; // and so should this - -int main() -{ - return 0; -}