Make FileInfoManagerGuard's default constructor public for C++20
Categories
(Core :: Storage: IndexedDB, defect, P3)
Tracking
()
People
(Reporter: cpeterson, Assigned: cpeterson)
References
Details
Attachments
(1 file)
C++20 changes to direct initialization with initializer lists make FileInfoManagerGuard's default constructor inaccessible.
https://en.cppreference.com/w/cpp/language/direct_initialization
Example code:
class C {
C() {}
};
class D {
D() = default; // like FileInfoManagerGuard
};
int main() {
C c{}; // error in C++17 and C++20
D d1; // error in C++17 and C++20
D d2{}; // OK in C++17, error in C++20. This is how FileInfoManagerGuard objects are initialized.
return 0;
}
| Assignee | ||
Comment 1•3 years ago
|
||
Example C++20 error in clang and gcc:
dom/indexedDB/ActorsParent.cpp:12131:21: error: calling a private constructor of class 'mozilla::dom::indexedDB::FileInfoManager<mozilla::dom::indexedDB::DatabaseFileManager>::FileInfoManagerGuard'
FileInfoManagerGuard{}, SafeRefPtrFromThis(), id,
^
dom/indexedDB/FileInfoManager.h:92:5: note: implicitly declared private here
FileInfoManagerGuard() = default;
^
| Assignee | ||
Comment 2•3 years ago
|
||
C++20 changes to direct initialization with initializer lists make FileInfoManagerGuard's default constructor inaccessible.
https://en.cppreference.com/w/cpp/language/direct_initialization
dom/indexedDB/ActorsParent.cpp:12131:21: error: calling a private constructor of class 'mozilla::dom::indexedDB::FileInfoManager<mozilla::dom::indexedDB::DatabaseFileManager>::FileInfoManagerGuard'
FileInfoManagerGuard{}, SafeRefPtrFromThis(), id,
^
dom/indexedDB/FileInfoManager.h:92:5: note: implicitly declared private here
FileInfoManagerGuard() = default;
^
Updated•3 years ago
|
| Assignee | ||
Updated•3 years ago
|
Comment 4•3 years ago
|
||
| bugherder | ||
Description
•