Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
REQUIRE does not compile when operator== in different namespace #443 . (
#468) * REQUIRE does not compile when operator== in different namespace #443 . Expression_lhs.op member method is not instantiated when it is missing a member operator and the user defined conversion is able to apply the global operator. * Removing utility and using an overloaded version of declval which is faster in doctest_fwd.h . * Using templated operator== inside TEST_CASE changes deduced types of forwarding references #399 . This is fixed by using rvalues as function argument and using forward for the right type of reference. Now both gcc and doctest either fails or either compiles but not like one compiles and the other fails
- Loading branch information
1 parent
b400ca9
commit 01546b2
Showing
14 changed files
with
438 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
#include <doctest/doctest.h> | ||
|
||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN | ||
#include <cstdint> | ||
#include <sstream> | ||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END | ||
|
||
namespace user1 { | ||
struct label | ||
{ | ||
label() | ||
: i(0) {} | ||
int i; | ||
}; | ||
} // namespace user1 | ||
|
||
DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations") | ||
DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") | ||
|
||
bool operator==(const user1::label& lhs, const user1::label& rhs) { return lhs.i == rhs.i; } | ||
|
||
|
||
TEST_CASE("namespace 1 global operator") { | ||
user1::label a; | ||
user1::label b; | ||
CHECK(a == b); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
#include <doctest/doctest.h> | ||
|
||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN | ||
#include <cstdint> | ||
#include <sstream> | ||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END | ||
|
||
namespace user2 { | ||
struct label | ||
{ | ||
label() | ||
: i(0) {} | ||
int i; | ||
friend bool operator==(const user2::label& lhs, const user2::label& rhs) { | ||
return lhs.i == rhs.i; | ||
} | ||
}; | ||
} // namespace user2 | ||
|
||
TEST_CASE("namespace 2 friend operator") { | ||
user2::label a; | ||
user2::label b; | ||
REQUIRE(a == b); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
#include <doctest/doctest.h> | ||
|
||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN | ||
#include <cstdint> | ||
#include <sstream> | ||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END | ||
|
||
namespace user3 { | ||
struct label | ||
{ | ||
label() | ||
: i(0) {} | ||
int i; | ||
bool operator==(const user3::label& rhs) const { return i == rhs.i; } | ||
}; | ||
} // namespace user3 | ||
|
||
TEST_CASE("namespace 3 member operator") { | ||
user3::label a; | ||
user3::label b; | ||
REQUIRE(a == b); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
#include <doctest/doctest.h> | ||
|
||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN | ||
#include <cstdint> | ||
#include <sstream> | ||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END | ||
|
||
namespace user4 { | ||
struct label | ||
{ | ||
label() | ||
: i(0) {} | ||
int i; | ||
bool operator==(const user4::label& rhs) const { return i == rhs.i; } | ||
}; | ||
} // namespace user4 | ||
|
||
namespace user5 { | ||
struct label | ||
{ | ||
label() | ||
: i(0) {} | ||
int i; | ||
bool operator==(const user5::label& rhs) const { return i == rhs.i; } | ||
}; | ||
} // namespace user5 | ||
|
||
TEST_CASE("namespace 4 member vs member") { | ||
user4::label a4; | ||
user4::label b4; | ||
|
||
user5::label a5; | ||
user5::label b5; | ||
|
||
REQUIRE(a4 == b4); | ||
REQUIRE(a5 == b5); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#include <doctest/doctest.h> | ||
|
||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN | ||
#include <cstdint> | ||
#include <sstream> | ||
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END | ||
|
||
namespace user6 { | ||
struct label | ||
{ | ||
label() | ||
: i(0) {} | ||
int i; | ||
bool operator==(const user6::label& rhs) const { return i == rhs.i; } | ||
}; | ||
} // namespace user6 | ||
|
||
namespace user7 { | ||
struct label | ||
{ | ||
label() | ||
: i(0) {} | ||
int i; | ||
friend bool operator==(const user7::label& lhs, const user7::label& rhs) { | ||
return lhs.i == rhs.i; | ||
} | ||
}; | ||
} // namespace user7 | ||
|
||
TEST_CASE("namespace 5 member vs friend") { | ||
user6::label a6; | ||
user6::label b6; | ||
|
||
user7::label a7; | ||
user7::label b7; | ||
|
||
REQUIRE(a6 == b6); | ||
REQUIRE(a7 == b7); | ||
} |
Oops, something went wrong.