[llvm-bugs] [Bug 33039] New: Class with a default constructible const member is not default constructible
via llvm-bugs
llvm-bugs at lists.llvm.org
Mon May 15 07:46:55 PDT 2017
https://bugs.llvm.org/show_bug.cgi?id=33039
Bug ID: 33039
Summary: Class with a default constructible const member is not
default constructible
Product: clang
Version: unspecified
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: C++
Assignee: unassignedclangbugs at nondot.org
Reporter: wellsd2 at rpi.edu
CC: dgregor at apple.com, llvm-bugs at lists.llvm.org
clang++ does not always mark classes with const members as default
constructible. Variants of this bug appear in older versions of clang (my
coworkers reported 3.4 and 3.7). The original context for this is here:
https://github.com/dealii/dealii/pull/4386
The problem only seems to arise when a parent class has a user-defined default
constructor and the child class uses the implicitly generated constructor
(adding a user defined do-nothing default constructor, e.g., "Child() {}", to
the example below fixes compilation, but "Child() = default;" does not).
GCC compiles this program successfully.
terminal output:
[drwells at archway zero-parent-test]$ clang++ --version
clang version 4.0.0 (tags/RELEASE_400/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
[drwells at archway zero-parent-test]$ clang++ -std=c++11 -Wall -Wextra -Wpedantic
parent.cc
parent.cc:32:3: error: static_assert failed "TestChild"
static_assert(std::is_default_constructible<TestChild>::value, "TestChild");
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
code:
#include <type_traits>
struct Parent
{
Parent() : a {0.0}, b {1.0}
{}
double a;
double b;
};
struct Child : public Parent
{};
class TestParent
{
const Parent p;
};
class TestChild
{
const Child c;
};
int main()
{
static_assert(std::is_default_constructible<Parent>::value, "Parent");
static_assert(std::is_default_constructible<Child>::value, "Child");
const Child c;
static_assert(std::is_default_constructible<TestParent>::value,
"TestParent");
static_assert(std::is_default_constructible<TestChild>::value, "TestChild");
}
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170515/0c9ce729/attachment-0001.html>
More information about the llvm-bugs
mailing list