ฉันกำลังพยายามเข้าใจกฎของส่วน 3.4.3.2/3 ของ N3797 c++14 ร่างการทำงานขั้นสุดท้าย:
กำหนดให้ X::m (โดยที่ X คือเนมสเปซที่ผู้ใช้ประกาศ) หรือกำหนด ::m (โดยที่ X คือเนมสเปซโกลบอล) หาก S(X, m) เป็นเซตว่าง โปรแกรมจะมีรูปแบบไม่ถูกต้อง มิฉะนั้น ถ้า S(X, m) มีสมาชิกเพียงตัวเดียว หรือถ้าบริบทของการอ้างอิงคือการใช้การประกาศ (7.3.3) S(X, m) ก็คือชุดการประกาศของ m ที่จำเป็น มิฉะนั้น ถ้าการใช้ m ไม่ใช่สิ่งที่ยอมให้มีการเลือกการประกาศเฉพาะจาก S(X, m) โปรแกรมจะมีรูปแบบไม่ถูกต้อง
ฉันได้เขียนโค้ดต่อไปนี้:
inline namespace A
{
int i = 42;
};
namespace B
{
static const int i = 5;
};
using B::i;
int g= ::i //S(X, i)={using B::i, A::i}
int main() { }
ดังที่กล่าวไว้ในคำพูดที่อ้างถึงข้างต้นเรามี:
[...]ถ้า S(X, m) เป็นเซตว่าง[...]
S(X,m) ไม่ว่างเปล่า เพิ่มเติม:
มิฉะนั้น ถ้า S(X, m) มีสมาชิกเพียงตัวเดียว
ไม่เป็นความจริง เพิ่มเติมว่า
หรือถ้าบริบทของการอ้างอิงเป็นการประกาศการใช้
ฉันไม่เข้าใจว่าข้อจำกัดนั้นตรวจสอบตัวอย่างของฉันได้อย่างไร ฉันต้องการเข้าใจว่าบริบทของการอ้างอิงถูกกำหนดอย่างไรขึ้นอยู่กับการใช้ข้อมูลอ้างอิงนั้น