In which access control context are evaluated concepts?
This question is a follow up to this one
[temp.concept]/5 says:
A concept is not instantiated ([temp.spec]).
[ Note: An id-expression that denotes a concept specialization is evaluated as an expression ([expr.prim.id]). [...]]
So maybe an expression that name a concept specialization can have different value because of accessibility.
If it were the case, I wonder in which context would be evaluated the expression:
The context of the concept definition;
The context of the expression;
The context of the expression recursively applied to concepts expression appearing in concepts definition?
For example, what could be the value for A::b2
and A::b2_rec
?
template<class T>
concept has_private = requires(){ &T::private_;};
template<class T>
concept has_private_rec = has_private<T>;
class B{
int private_;
friend class A;
};
inline constexpr bool b1 = has_private<B>;//I expects false
inline constexpr bool b1_rec = has_private_rec<B>;//I expects false
class A{
static constexpr bool b2 = has_private<B>; //?
static constexpr bool b2_rec = has_private_rec<B>; //?
};
Note Clang experimental concepts and gcc concepts TS implementation produce compilation error for b1 and b1_rec, but b2 and b2_rec are true;
c++ language-lawyer c++-concepts c++20
add a comment |
This question is a follow up to this one
[temp.concept]/5 says:
A concept is not instantiated ([temp.spec]).
[ Note: An id-expression that denotes a concept specialization is evaluated as an expression ([expr.prim.id]). [...]]
So maybe an expression that name a concept specialization can have different value because of accessibility.
If it were the case, I wonder in which context would be evaluated the expression:
The context of the concept definition;
The context of the expression;
The context of the expression recursively applied to concepts expression appearing in concepts definition?
For example, what could be the value for A::b2
and A::b2_rec
?
template<class T>
concept has_private = requires(){ &T::private_;};
template<class T>
concept has_private_rec = has_private<T>;
class B{
int private_;
friend class A;
};
inline constexpr bool b1 = has_private<B>;//I expects false
inline constexpr bool b1_rec = has_private_rec<B>;//I expects false
class A{
static constexpr bool b2 = has_private<B>; //?
static constexpr bool b2_rec = has_private_rec<B>; //?
};
Note Clang experimental concepts and gcc concepts TS implementation produce compilation error for b1 and b1_rec, but b2 and b2_rec are true;
c++ language-lawyer c++-concepts c++20
I'm going to guess/hope thatb2
isfalse
but honestly I do not know.
– Barry
Nov 12 '18 at 19:12
I’m tempted to bounty this, but fear it might bring well-meaning but poor answers.
– Jon Harper
Dec 10 '18 at 21:06
add a comment |
This question is a follow up to this one
[temp.concept]/5 says:
A concept is not instantiated ([temp.spec]).
[ Note: An id-expression that denotes a concept specialization is evaluated as an expression ([expr.prim.id]). [...]]
So maybe an expression that name a concept specialization can have different value because of accessibility.
If it were the case, I wonder in which context would be evaluated the expression:
The context of the concept definition;
The context of the expression;
The context of the expression recursively applied to concepts expression appearing in concepts definition?
For example, what could be the value for A::b2
and A::b2_rec
?
template<class T>
concept has_private = requires(){ &T::private_;};
template<class T>
concept has_private_rec = has_private<T>;
class B{
int private_;
friend class A;
};
inline constexpr bool b1 = has_private<B>;//I expects false
inline constexpr bool b1_rec = has_private_rec<B>;//I expects false
class A{
static constexpr bool b2 = has_private<B>; //?
static constexpr bool b2_rec = has_private_rec<B>; //?
};
Note Clang experimental concepts and gcc concepts TS implementation produce compilation error for b1 and b1_rec, but b2 and b2_rec are true;
c++ language-lawyer c++-concepts c++20
This question is a follow up to this one
[temp.concept]/5 says:
A concept is not instantiated ([temp.spec]).
[ Note: An id-expression that denotes a concept specialization is evaluated as an expression ([expr.prim.id]). [...]]
So maybe an expression that name a concept specialization can have different value because of accessibility.
If it were the case, I wonder in which context would be evaluated the expression:
The context of the concept definition;
The context of the expression;
The context of the expression recursively applied to concepts expression appearing in concepts definition?
For example, what could be the value for A::b2
and A::b2_rec
?
template<class T>
concept has_private = requires(){ &T::private_;};
template<class T>
concept has_private_rec = has_private<T>;
class B{
int private_;
friend class A;
};
inline constexpr bool b1 = has_private<B>;//I expects false
inline constexpr bool b1_rec = has_private_rec<B>;//I expects false
class A{
static constexpr bool b2 = has_private<B>; //?
static constexpr bool b2_rec = has_private_rec<B>; //?
};
Note Clang experimental concepts and gcc concepts TS implementation produce compilation error for b1 and b1_rec, but b2 and b2_rec are true;
c++ language-lawyer c++-concepts c++20
c++ language-lawyer c++-concepts c++20
edited Nov 30 '18 at 16:11
TylerH
15.4k105067
15.4k105067
asked Nov 12 '18 at 13:33
Oliv
8,3251956
8,3251956
I'm going to guess/hope thatb2
isfalse
but honestly I do not know.
– Barry
Nov 12 '18 at 19:12
I’m tempted to bounty this, but fear it might bring well-meaning but poor answers.
– Jon Harper
Dec 10 '18 at 21:06
add a comment |
I'm going to guess/hope thatb2
isfalse
but honestly I do not know.
– Barry
Nov 12 '18 at 19:12
I’m tempted to bounty this, but fear it might bring well-meaning but poor answers.
– Jon Harper
Dec 10 '18 at 21:06
I'm going to guess/hope that
b2
is false
but honestly I do not know.– Barry
Nov 12 '18 at 19:12
I'm going to guess/hope that
b2
is false
but honestly I do not know.– Barry
Nov 12 '18 at 19:12
I’m tempted to bounty this, but fear it might bring well-meaning but poor answers.
– Jon Harper
Dec 10 '18 at 21:06
I’m tempted to bounty this, but fear it might bring well-meaning but poor answers.
– Jon Harper
Dec 10 '18 at 21:06
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53263299%2fin-which-access-control-context-are-evaluated-concepts%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53263299%2fin-which-access-control-context-are-evaluated-concepts%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I'm going to guess/hope that
b2
isfalse
but honestly I do not know.– Barry
Nov 12 '18 at 19:12
I’m tempted to bounty this, but fear it might bring well-meaning but poor answers.
– Jon Harper
Dec 10 '18 at 21:06