Add unit tests for constexpr constructors

This also adds unit tests for inline+explicit constructors being okay,
with and without constexpr.
This commit is contained in:
Dana Jansens 2017-03-02 13:19:58 -05:00
parent cf4071cf5d
commit 2db65fed51

View File

@ -1316,6 +1316,80 @@ class CpplintTest(CpplintTestBase):
};""", };""",
'Single-parameter constructors should be marked explicit.' 'Single-parameter constructors should be marked explicit.'
' [runtime/explicit] [5]') ' [runtime/explicit] [5]')
# missing explicit for constexpr constructors is bad as well
self.TestMultiLineLint(
"""
class Foo {
constexpr Foo(int f);
};""",
'Single-parameter constructors should be marked explicit.'
' [runtime/explicit] [5]')
# missing explicit for constexpr+inline constructors is bad as well
self.TestMultiLineLint(
"""
class Foo {
constexpr inline Foo(int f);
};""",
'Single-parameter constructors should be marked explicit.'
' [runtime/explicit] [5]')
self.TestMultiLineLint(
"""
class Foo {
inline constexpr Foo(int f);
};""",
'Single-parameter constructors should be marked explicit.'
' [runtime/explicit] [5]')
# explicit with inline is accepted
self.TestMultiLineLint(
"""
class Foo {
inline explicit Foo(int f);
};""",
'')
self.TestMultiLineLint(
"""
class Foo {
explicit inline Foo(int f);
};""",
'')
# explicit with constexpr is accepted
self.TestMultiLineLint(
"""
class Foo {
constexpr explicit Foo(int f);
};""",
'')
self.TestMultiLineLint(
"""
class Foo {
explicit constexpr Foo(int f);
};""",
'')
# explicit with constexpr+inline is accepted
self.TestMultiLineLint(
"""
class Foo {
inline constexpr explicit Foo(int f);
};""",
'')
self.TestMultiLineLint(
"""
class Foo {
explicit inline constexpr Foo(int f);
};""",
'')
self.TestMultiLineLint(
"""
class Foo {
constexpr inline explicit Foo(int f);
};""",
'')
self.TestMultiLineLint(
"""
class Foo {
explicit constexpr inline Foo(int f);
};""",
'')
# structs are caught as well. # structs are caught as well.
self.TestMultiLineLint( self.TestMultiLineLint(
""" """