Kode ini tidak dikompilasi di Dentang (6,7,8,9, trunk), tetapi kompilasi saja di GCC (7.1, 8.1, 9.1):
template<class T> struct TypeHolder { using type = T; };
template<int i>
class Outer {
private:
template<class T>
static constexpr auto compute_type() {
if constexpr (i == 42) {
return TypeHolder<bool>{};
} else {
return TypeHolder<T>{};
}
}
public:
template<class T>
using TheType = typename decltype(Outer<i>::compute_type<T>())::type;
};
int main() {
Outer<42>::TheType<int> i;
}
Dentang memberitahu saya:
<source>:17:49: error: 'compute_type' is a private member of 'Outer<42>'
... yang tentu saja itu, tapi aku mencoba mengakses anggota itu dari dalam kelas yang sama. Saya tidak mengerti mengapa itu tidak dapat diakses di sana. Sudahkah saya menekan (dan haruskah saya mengajukan) bug Dentang?
Anda dapat bermain-main dengan kode di explorer compiler Godbolt .
Lucu! Namun, pemeriksaan akses harus dilakukan dengan "izin" dari
—
Lukas Barth
Outer<42>
, bukan main
- bukan? Terlihat lebih seperti bug bagiku sekarang.
Apakah menggunakan
—
Brandon
std::result_of
pekerjaan saja?
FWIW, Juga bekerja di ICC dan MSVC.
—
ChrisMM
friend int main();
berhenti Dentang mengeluh.