Code Monkey home page Code Monkey logo

munit-plus's Introduction

µnit-plus

This is an unofficial port of the µnit unit testing library to C++ 2011. Features include:

  • API similar to the original library
  • Proper handling of exceptions
  • Templated functions for randomizing trivial instances
  • Support for user-defined comparison operators for assertions
  • Support for custom formatters for user-defined classes

The license remains MIT.

Build status for µnit-plus

Build status Windows build status

Original README continues below.

µnit (from original)

µnit is a small but full-featured unit testing framework for C. It has no dependencies (beyond libc), is permissively licensed (MIT), and is easy to include into any project.

For more information, see the µnit web site.

Build status Windows build status

Features

Features µnit currently includes include:

  • Handy assertion macros which make for nice error messages.
  • Reproducible cross-platform random number generation, including support for supplying a seed via CLI.
  • Timing of both wall-clock and CPU time.
  • Parameterized tests.
  • Nested test suites.
  • Flexible CLI.
  • Forking (except on Windows).
  • Hiding output of successful tests.

Features µnit does not currently include, but some day may include (a.k.a., if you file a PR…), include:

Include into your project with meson

In your subprojects folder put a munit.wrap file containing:

[wrap-git]
directory=munit
url=https://github.com/nemequ/munit/
revision=head

Then you can use a subproject fallback when you include munit as a dependency to your project: dependency('munit', fallback: ['munit', 'munit_dep'])

Documentation

See the µnit web site.

Additionally, there is a heavily-commented example.c in the repository.

munit-plus's People

Contributors

cher-nov avatar chriso avatar codylico avatar dwchandler avatar gbuella avatar jdek avatar jibsen avatar kaworu avatar nemequ avatar readmecritic avatar vivekjain180797 avatar

Watchers

 avatar

Forkers

vivekjain180797

munit-plus's Issues

Visual Studio wants an exception handling mode

from AppVeyor:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xlocale(341): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\exception(359): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\exception(359): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xlocale(341): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\exception(359): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\exception(359): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings

The "fix for all tests" doesn't work

Commit 2cfd06c breaks when using clang++.

from Travis CI:

/example/cxx                         [ FAIL  ]
Error: example.cpp:348: assertion failed: most_fun_word_to_type.c_str() != stewardesses.c_str() (0x1e37ef8 != 0x1e37ef8)
Info: example.cpp:259: yay! destructor was called.

Missing assignment operator for `munit_plus_op_switch` on Visual Studio 2010

from AppVeyor:

c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=char
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=unsigned char
        ]
        example.cpp(63) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=unsigned char
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=short
        ]
        example.cpp(68) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=short
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=size_t
        ]
        example.cpp(76) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=size_t
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=double
        ]
        example.cpp(79) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=double
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=const void *
        ]
        example.cpp(109) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=const void *
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=int
        ]
        example.cpp(150) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=int
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=const char &
        ]
        example.cpp(293) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=const char &
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=const unsigned char &
        ]
        example.cpp(300) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=const unsigned char &
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=const int &
        ]
        example.cpp(305) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=const int &
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=const unsigned int &
        ]
        example.cpp(313) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=const unsigned int &
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=const double &
        ]
        example.cpp(316) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=const double &
        ]
c:\projects\munit-plus\munit.hpp(679) : warning C4512: 'munit_plus_op_switch<A>' : assignment operator could not be generated
        with
        [
            A=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &
        ]
        example.cpp(334) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
        with
        [
            A=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &
        ]

`const` applied to references in `munit_plus_assert_op`

from Travis CI:

munit.hpp:784:24: error: ‘const’ qualifiers cannot be applied to ‘const char (&)[13]’
     decltype(b) const& munit_tmp_b_ = (b); \
                        ^
example.cpp:334:3: note: in expansion of macro ‘munit_plus_assert_op’
   munit_plus_assert_op(stewardesses, ==, "stewardesses");
   ^

Variadic template breaks build on old Visual Studio

from AppVeyor:

c:\projects\munit-plus\munit.hpp(672) : error C2143: syntax error : missing ',' before '...'
c:\projects\munit-plus\munit.hpp(673) : error C2061: syntax error : identifier 'D'
c:\projects\munit-plus\munit.hpp(796) : error C2143: syntax error : missing ',' before '...'
c:\projects\munit-plus\munit.hpp(797) : error C2061: syntax error : identifier 'D'

This issue seems to affect munit_plus_new, munit_plus_newp, and munit_plus_new_ex.

Undefined `std::atomic_uint32_t`

from Travis CI:

munit.cpp:814:32: error: ‘atomic_uint32_t’ in namespace ‘std’ does not name a type
 #  define ATOMIC_UINT32_T std::atomic_uint32_t
                                ^
munit.cpp:827:8: note: in expansion of macro ‘ATOMIC_UINT32_T’
 static ATOMIC_UINT32_T munit_plus_rand_state = ATOMIC_UINT32_INIT(42);
        ^~~~~~~~~~~~~~~
munit.cpp: In function ‘void munit_plus_rand_seed(uint32_t)’:
munit.cpp:913:28: error: ‘munit_plus_rand_state’ was not declared in this scope
   munit_plus_atomic_store(&munit_plus_rand_state, state);
                            ^
munit.cpp:861:83: note: in definition of macro ‘munit_plus_atomic_store’
 t_plus_atomic_store(dest, value)         std::atomic_store_explicit(dest, value, std::memory_order_seq_cst)
                                                                     ^~~~
munit.cpp: In function ‘uint32_t munit_plus_rand_uint32()’:
munit.cpp:944:35: error: ‘munit_plus_rand_state’ was not declared in this scope
     old = munit_plus_atomic_load(&munit_plus_rand_state);
                                   ^
munit.cpp:862:82: note: in definition of macro ‘munit_plus_atomic_load’
 it_plus_atomic_load(src)                  std::atomic_load_explicit(src, std::memory_order_seq_cst)
                                                                     ^~~
munit.cpp:946:36: error: ‘munit_plus_rand_state’ was not declared in this scope
   } while (!munit_plus_atomic_cas(&munit_plus_rand_state, &old, state));
                                    ^
munit.cpp:863:100: note: in definition of macro ‘munit_plus_atomic_cas’
 (dest, expected, value) std::atomic_compare_exchange_weak_explicit( dest, expected, value, std::memory_order_seq_cst, std::memory_order_seq_cst )
                                                                     ^~~~
munit.cpp: In function ‘void munit_plus_rand_memory(std::size_t, uint8_t*)’:
munit.cpp:973:43: error: ‘munit_plus_rand_state’ was not declared in this scope
     state = old = munit_plus_atomic_load(&munit_plus_rand_state);
                                           ^
munit.cpp:862:82: note: in definition of macro ‘munit_plus_atomic_load’
 it_plus_atomic_load(src)                  std::atomic_load_explicit(src, std::memory_order_seq_cst)
                                                                     ^~~
munit.cpp:975:36: error: ‘munit_plus_rand_state’ was not declared in this scope
   } while (!munit_plus_atomic_cas(&munit_plus_rand_state, &old, state));
                                    ^
munit.cpp:863:100: note: in definition of macro ‘munit_plus_atomic_cas’
 (dest, expected, value) std::atomic_compare_exchange_weak_explicit( dest, expected, value, std::memory_order_seq_cst, std::memory_order_seq_cst )
                                                                     ^~~~
munit.cpp: In function ‘uint32_t munit_plus_rand_at_most(uint32_t, uint32_t)’:
munit.cpp:1005:43: error: ‘munit_plus_rand_state’ was not declared in this scope
     state = old = munit_plus_atomic_load(&munit_plus_rand_state);
                                           ^
munit.cpp:862:82: note: in definition of macro ‘munit_plus_atomic_load’
 it_plus_atomic_load(src)                  std::atomic_load_explicit(src, std::memory_order_seq_cst)
                                                                     ^~~
munit.cpp:1007:36: error: ‘munit_plus_rand_state’ was not declared in this scope
   } while (!munit_plus_atomic_cas(&munit_plus_rand_state, &old, state));
                                    ^
munit.cpp:863:100: note: in definition of macro ‘munit_plus_atomic_cas’
 (dest, expected, value) std::atomic_compare_exchange_weak_explicit( dest, expected, value, std::memory_order_seq_cst, std::memory_order_seq_cst )
                                                                     ^~~~
munit.cpp: In function ‘double munit_plus_rand_double()’:
munit.cpp:1031:43: error: ‘munit_plus_rand_state’ was not declared in this scope
     state = old = munit_plus_atomic_load(&munit_plus_rand_state);
                                           ^
munit.cpp:862:82: note: in definition of macro ‘munit_plus_atomic_load’
 it_plus_atomic_load(src)                  std::atomic_load_explicit(src, std::memory_order_seq_cst)
                                                                     ^~~
munit.cpp:1037:36: error: ‘munit_plus_rand_state’ was not declared in this scope
   } while (!munit_plus_atomic_cas(&munit_plus_rand_state, &old, state));
                                    ^
munit.cpp:863:100: note: in definition of macro ‘munit_plus_atomic_cas’
 (dest, expected, value) std::atomic_compare_exchange_weak_explicit( dest, expected, value, std::memory_order_seq_cst, std::memory_order_seq_cst )
                                                                     ^~~~

Transport exceptions via `munit_plus_error_jmp` on VIsual Studio 2010

Ideally, when a unit test calls munit_plus_errorf_ex or munit_plus_logf_ex, the constructed munit_plus_error_jmp would capture a copy of any exception being processed, and would ready itself to rethrow the exception only if it has one.

Due to apparent difficulties with properly checking presence of exceptions in an std::exception_ptr, commit 2c66413 hard-codes the munit_plus_error_jmp class to always throw. This is incorrect behavior, but I do not yet know how to fix this issue.

Missing support for range-based for-loops in Visual Studio 2010

The plan for this issue is to replace the range-based for loops in example.cpp with iterator-based loops.

From AppVeyor

example.cpp(415) : error C2143: syntax error : missing ',' before ':'
example.cpp(415) : error C2143: syntax error : missing ';' before '{'
example.cpp(416) : error C2143: syntax error : missing ',' before ':'
example.cpp(416) : error C2530: 'x' : references must be initialized
example.cpp(416) : error C2143: syntax error : missing ';' before '{'
example.cpp(417) : error C2143: syntax error : missing ',' before ':'
example.cpp(417) : error C2143: syntax error : missing ';' before '{'

pgc++ testing on Travis CI broke

Testing on the pgc++ compiler using Travis CI currently does not work.

The reason seems to be a change of URIs on NVIDIA's website, resulting in the install_pgi.sh script to fetch from the wrong Internet location.

unreferenced formal parameters in 'munit.cpp'

from AppVeyor:

munit.cpp(2103): warning C4100: 'val': unreferenced formal parameter
example.cpp(373): warning C4100: 'data': unreferenced formal parameter
example.cpp(373): warning C4100: 'params': unreferenced formal parameter
example.cpp(460): warning C4100: 'data': unreferenced formal parameter

Broken constexpr fields in munit_plus_ops

from AppVeyor:

c:\projects\munit-plus\munit.hpp(610) : error C2864: 'munit_plus_ops::equal_to::text' : a static data member with an in-class initializer must have non-volatile const integral type
        type is 'const char *'
c:\projects\munit-plus\munit.hpp(614) : error C2864: 'munit_plus_ops::not_equal_to::text' : a static data member with an in-class initializer must have non-volatile const integral type
        type is 'const char *'
c:\projects\munit-plus\munit.hpp(618) : error C2864: 'munit_plus_ops::greater::text' : a static data member with an in-class initializer must have non-volatile const integral type
        type is 'const char *'
c:\projects\munit-plus\munit.hpp(622) : error C2864: 'munit_plus_ops::less::text' : a static data member with an in-class initializer must have non-volatile const integral type
        type is 'const char *'
c:\projects\munit-plus\munit.hpp(626) : error C2864: 'munit_plus_ops::greater_equal::text' : a static data member with an in-class initializer must have non-volatile const integral type
        type is 'const char *'
c:\projects\munit-plus\munit.hpp(630) : error C2864: 'munit_plus_ops::less_equal::text' : a static data member with an in-class initializer must have non-volatile const integral type
        type is 'const char *'

It looks like the missing constexpr breaks things on Visual Studio.

Operators for `munit_plus_op_switch` break on compilation

from AppVeyor:

c:\projects\munit-plus\munit.hpp(668) : error C2143: syntax error : missing ';' before '=='
        c:\projects\munit-plus\munit.hpp(679) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
c:\projects\munit-plus\munit.hpp(667) : error C3856: 'munit_plus_ops::equal_to': class is not a class template
c:\projects\munit-plus\munit.hpp(668) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(668) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(668) : error C2805: binary 'operator ==' has too few parameters
c:\projects\munit-plus\munit.hpp(670) : error C2143: syntax error : missing ';' before '!='
c:\projects\munit-plus\munit.hpp(669) : error C3856: 'munit_plus_ops::not_equal_to': class is not a class template
c:\projects\munit-plus\munit.hpp(670) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(670) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(670) : error C2805: binary 'operator !=' has too few parameters
c:\projects\munit-plus\munit.hpp(672) : error C2143: syntax error : missing ';' before '>'
c:\projects\munit-plus\munit.hpp(671) : error C3856: 'munit_plus_ops::greater': class is not a class template
c:\projects\munit-plus\munit.hpp(672) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(672) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(672) : error C2805: binary 'operator >' has too few parameters
c:\projects\munit-plus\munit.hpp(674) : error C2143: syntax error : missing ';' before '<'
c:\projects\munit-plus\munit.hpp(673) : error C3856: 'munit_plus_ops::less': class is not a class template
c:\projects\munit-plus\munit.hpp(674) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(674) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(674) : error C2805: binary 'operator <' has too few parameters
c:\projects\munit-plus\munit.hpp(676) : error C2143: syntax error : missing ';' before '>='
c:\projects\munit-plus\munit.hpp(675) : error C3856: 'munit_plus_ops::greater_equal': class is not a class template
c:\projects\munit-plus\munit.hpp(676) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(676) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(676) : error C2805: binary 'operator >=' has too few parameters
c:\projects\munit-plus\munit.hpp(678) : error C2143: syntax error : missing ';' before '<='
c:\projects\munit-plus\munit.hpp(677) : error C3856: 'munit_plus_ops::less_equal': class is not a class template
c:\projects\munit-plus\munit.hpp(678) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(678) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(678) : error C2805: binary 'operator <=' has too few parameters
c:\projects\munit-plus\munit.hpp(757) : error C2065: 'B' : undeclared identifier
c:\projects\munit-plus\munit.hpp(757) : error C2143: syntax error : missing ')' before 'const'
c:\projects\munit-plus\munit.hpp(757) : error C2433: 'munit_plus_op_switch<A>::operator ==' : 'inline' not permitted on data declarations
c:\projects\munit-plus\munit.hpp(757) : error C2470: 'munit_plus_op_switch<A>::operator ==' : looks like a function definition, but there is no parameter list; skipping apparent body
c:\projects\munit-plus\munit.hpp(757) : error C2059: syntax error : ')'
c:\projects\munit-plus\munit.hpp(763) : error C2065: 'A' : undeclared identifier
c:\projects\munit-plus\munit.hpp(763) : error C2923: 'munit_plus_op_switch' : 'A' is not a valid template type argument for parameter 'A'
c:\projects\munit-plus\munit.hpp(763) : error C2143: syntax error : missing ';' before '{'
c:\projects\munit-plus\munit.hpp(763) : error C2447: '{' : missing function header (old-style formal list?)
c:\projects\munit-plus\munit.hpp(769) : error C2065: 'B' : undeclared identifier
c:\projects\munit-plus\munit.hpp(769) : error C2143: syntax error : missing ')' before 'const'
c:\projects\munit-plus\munit.hpp(769) : error C2433: 'munit_plus_op_switch<A>::operator >' : 'inline' not permitted on data declarations
c:\projects\munit-plus\munit.hpp(769) : error C2470: 'munit_plus_op_switch<A>::operator >' : looks like a function definition, but there is no parameter list; skipping apparent body
c:\projects\munit-plus\munit.hpp(769) : error C2059: syntax error : ')'
c:\projects\munit-plus\munit.hpp(775) : error C2065: 'A' : undeclared identifier
c:\projects\munit-plus\munit.hpp(775) : error C2923: 'munit_plus_op_switch' : 'A' is not a valid template type argument for parameter 'A'
c:\projects\munit-plus\munit.hpp(775) : error C2143: syntax error : missing ';' before '{'
c:\projects\munit-plus\munit.hpp(775) : error C2447: '{' : missing function header (old-style formal list?)
c:\projects\munit-plus\munit.hpp(781) : error C2065: 'B' : undeclared identifier
c:\projects\munit-plus\munit.hpp(781) : error C2143: syntax error : missing ')' before 'const'
c:\projects\munit-plus\munit.hpp(781) : error C2433: 'munit_plus_op_switch<A>::operator >=' : 'inline' not permitted on data declarations
c:\projects\munit-plus\munit.hpp(781) : error C2470: 'munit_plus_op_switch<A>::operator >=' : looks like a function definition, but there is no parameter list; skipping apparent body
c:\projects\munit-plus\munit.hpp(781) : error C2059: syntax error : ')'
c:\projects\munit-plus\munit.hpp(787) : error C2065: 'A' : undeclared identifier
c:\projects\munit-plus\munit.hpp(787) : error C2923: 'munit_plus_op_switch' : 'A' is not a valid template type argument for parameter 'A'
c:\projects\munit-plus\munit.hpp(787) : error C2143: syntax error : missing ';' before '{'
c:\projects\munit-plus\munit.hpp(787) : error C2447: '{' : missing function header (old-style formal list?)
example.cpp
c:\projects\munit-plus\munit.hpp(668) : error C2143: syntax error : missing ';' before '=='
        c:\projects\munit-plus\munit.hpp(679) : see reference to class template instantiation 'munit_plus_op_switch<A>' being compiled
c:\projects\munit-plus\munit.hpp(667) : error C3856: 'munit_plus_ops::equal_to': class is not a class template
c:\projects\munit-plus\munit.hpp(668) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(668) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(668) : error C2805: binary 'operator ==' has too few parameters
c:\projects\munit-plus\munit.hpp(670) : error C2143: syntax error : missing ';' before '!='
c:\projects\munit-plus\munit.hpp(669) : error C3856: 'munit_plus_ops::not_equal_to': class is not a class template
c:\projects\munit-plus\munit.hpp(670) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(670) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(670) : error C2805: binary 'operator !=' has too few parameters
c:\projects\munit-plus\munit.hpp(672) : error C2143: syntax error : missing ';' before '>'
c:\projects\munit-plus\munit.hpp(671) : error C3856: 'munit_plus_ops::greater': class is not a class template
c:\projects\munit-plus\munit.hpp(672) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(672) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(672) : error C2805: binary 'operator >' has too few parameters
c:\projects\munit-plus\munit.hpp(674) : error C2143: syntax error : missing ';' before '<'
c:\projects\munit-plus\munit.hpp(673) : error C3856: 'munit_plus_ops::less': class is not a class template
c:\projects\munit-plus\munit.hpp(674) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(674) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(674) : error C2805: binary 'operator <' has too few parameters
c:\projects\munit-plus\munit.hpp(676) : error C2143: syntax error : missing ';' before '>='
c:\projects\munit-plus\munit.hpp(675) : error C3856: 'munit_plus_ops::greater_equal': class is not a class template
c:\projects\munit-plus\munit.hpp(676) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(676) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(676) : error C2805: binary 'operator >=' has too few parameters
c:\projects\munit-plus\munit.hpp(678) : error C2143: syntax error : missing ';' before '<='
c:\projects\munit-plus\munit.hpp(677) : error C3856: 'munit_plus_ops::less_equal': class is not a class template
c:\projects\munit-plus\munit.hpp(678) : error C2061: syntax error : identifier 'B'
c:\projects\munit-plus\munit.hpp(678) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\projects\munit-plus\munit.hpp(678) : error C2805: binary 'operator <=' has too few parameters
c:\projects\munit-plus\munit.hpp(757) : error C2065: 'B' : undeclared identifier
c:\projects\munit-plus\munit.hpp(757) : error C2143: syntax error : missing ')' before 'const'
c:\projects\munit-plus\munit.hpp(757) : error C2433: 'munit_plus_op_switch<A>::operator ==' : 'inline' not permitted on data declarations
c:\projects\munit-plus\munit.hpp(757) : error C2470: 'munit_plus_op_switch<A>::operator ==' : looks like a function definition, but there is no parameter list; skipping apparent body
c:\projects\munit-plus\munit.hpp(757) : error C2059: syntax error : ')'
c:\projects\munit-plus\munit.hpp(763) : error C2065: 'A' : undeclared identifier
c:\projects\munit-plus\munit.hpp(763) : error C2923: 'munit_plus_op_switch' : 'A' is not a valid template type argument for parameter 'A'
c:\projects\munit-plus\munit.hpp(763) : error C2143: syntax error : missing ';' before '{'
c:\projects\munit-plus\munit.hpp(763) : error C2447: '{' : missing function header (old-style formal list?)
c:\projects\munit-plus\munit.hpp(769) : error C2065: 'B' : undeclared identifier
c:\projects\munit-plus\munit.hpp(769) : error C2143: syntax error : missing ')' before 'const'
c:\projects\munit-plus\munit.hpp(769) : error C2433: 'munit_plus_op_switch<A>::operator >' : 'inline' not permitted on data declarations
c:\projects\munit-plus\munit.hpp(769) : error C2470: 'munit_plus_op_switch<A>::operator >' : looks like a function definition, but there is no parameter list; skipping apparent body
c:\projects\munit-plus\munit.hpp(769) : error C2059: syntax error : ')'
c:\projects\munit-plus\munit.hpp(775) : error C2065: 'A' : undeclared identifier
c:\projects\munit-plus\munit.hpp(775) : error C2923: 'munit_plus_op_switch' : 'A' is not a valid template type argument for parameter 'A'
c:\projects\munit-plus\munit.hpp(775) : error C2143: syntax error : missing ';' before '{'
c:\projects\munit-plus\munit.hpp(775) : error C2447: '{' : missing function header (old-style formal list?)
c:\projects\munit-plus\munit.hpp(781) : error C2065: 'B' : undeclared identifier
c:\projects\munit-plus\munit.hpp(781) : error C2143: syntax error : missing ')' before 'const'
c:\projects\munit-plus\munit.hpp(781) : error C2433: 'munit_plus_op_switch<A>::operator >=' : 'inline' not permitted on data declarations
c:\projects\munit-plus\munit.hpp(781) : error C2470: 'munit_plus_op_switch<A>::operator >=' : looks like a function definition, but there is no parameter list; skipping apparent body
c:\projects\munit-plus\munit.hpp(781) : error C2059: syntax error : ')'
c:\projects\munit-plus\munit.hpp(787) : error C2065: 'A' : undeclared identifier
c:\projects\munit-plus\munit.hpp(787) : error C2923: 'munit_plus_op_switch' : 'A' is not a valid template type argument for parameter 'A'
c:\projects\munit-plus\munit.hpp(787) : error C2143: syntax error : missing ';' before '{'
c:\projects\munit-plus\munit.hpp(787) : error C2447: '{' : missing function header (old-style formal list?)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.