Что можно сделать в C ++ 20?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Что можно сделать в C ++ 20?

Сообщение Anonymous »

§10.4/3 дает все возможные ситуации, которые подробно рассмотрены декларированием. Однако я не могу полностью это понять. Рассмотрим пример, описанный в §10.4/6:
исходный файл foo.h :

Код: Выделить всё

namespace N {
struct X {};
int d();
int e();
inline int f(X, int = d()) { return e(); }
int g(X);
int h(X);
}
< /code>
Интерфейс модуль M: < /p>
module;
#include "foo.h"
export module M;
template int use_f() {
N::X x;                       // N​::​X, N, and ​::​ are decl-reachable from use_­f
return f(x, 123);             // N​::​f is decl-reachable from use_­f,
// N​::​e is indirectly decl-reachable from use_­f
//   because it is decl-reachable from N​::​f, and
// N​::​d is decl-reachable from use_­f
//   because it is decl-reachable from N​::​f
//   even though it is not used in this call
}
template int use_g() {
N::X x;                       // N​::​X, N, and ​::​ are decl-reachable from use_­g
return g((T(), x));           // N​::​g is not decl-reachable from use_­g
}
template int use_h() {
N::X x;                       // N​::​X, N, and ​::​ are decl-reachable from use_­h
return h((T(), x));           // N​::​h is not decl-reachable from use_­h, but
// N​::​h is decl-reachable from use_­h
}
int k = use_h();
// use_­h is decl-reachable from k, so
// N​::​h is decl-reachable from k

Module M implementation:
module M;
int a = use_f();           // OK
int b = use_g();           // error: no viable function for call to g;
// g is not decl-reachable from purview of
// module M's interface, so is discarded
int c = use_h();           // OK

Почему n :: g не декларируется от use_g ? Почему n :: h не предоставляется декларированием от use_h , но n :: h является декларированием от use_h ? Почему §10.4/(3.2) или §10.4/(3.3) не применяется к ним?


Подробнее здесь: https://stackoverflow.com/questions/745 ... le-in-c-20
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»