Is there a context where the expression `a.b::c` makes sense?What is a fully qualified name?Where and why do I have to put the “template” and “typename” keywords?Do the parentheses after the type name make a difference with new?What is a lambda expression in C++11?Why can I not use the namespace directive in c++ struct?Is C++ context-free or context-sensitive?Name lookup of first namespace name in nested-name-specifier?A type of initializer?Shouldn't a compiler raise a warning for member variables of base struct shadowed in derived class(es)?Nested classes are dependent types in class templates?C++ attributes namespace?
How to communicate to my GM that not being allowed to use stealth isn't fun for me?
Longest bridge/tunnel that can be cycled over/through?
Someone whose aspirations exceed abilities or means
What's up with this leaf?
Group Integers by Originality
Using "subway" as name for London Underground?
What ways have you found to get edits from non-LaTeX users?
What to do when surprise and a high initiative roll conflict with the narrative?
Is a lack of character descriptions a problem?
Inward extrusion is not working
Meaning of 'lose their grip on the groins of their followers'
Why can't I use =default for default ctors with a member initializer list
Which physicist is this quote attributed to?
Logarithm of exponential
How to handle self harm scars on the arm in work environment?
How can I tell the difference between unmarked sugar and stevia?
Should I give professor gift at the beginning of my PhD?
A IP can traceroute to it, but can not ping
How is John Wick 3 a 15 certificate?
How to trick the reader into thinking they're following a redshirt instead of the protagonist?
f-type expansion
Is the term 'open source' a trademark?
Mathematically, why does mass matrix / load vector lumping work?
Fixing obscure 8080 emulator bug?
Is there a context where the expression `a.b::c` makes sense?
What is a fully qualified name?Where and why do I have to put the “template” and “typename” keywords?Do the parentheses after the type name make a difference with new?What is a lambda expression in C++11?Why can I not use the namespace directive in c++ struct?Is C++ context-free or context-sensitive?Name lookup of first namespace name in nested-name-specifier?A type of initializer?Shouldn't a compiler raise a warning for member variables of base struct shadowed in derived class(es)?Nested classes are dependent types in class templates?C++ attributes namespace?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
In C++ consider the grammar rule:
member-access-expression: LHS member-access-operator RHS
(op is .)
andLHS=unqualified id-expression e.g. that references an instance variable.RHS=qualified id-expression (with at least one nested identifier)
example: a.b::c
If that can ever pass the semantic check, what situation would it be ?
The following experiment:
struct B;
struct A
B b;
;
int main()
A a;
a.b::c;
returns
'b' is not a class, namespace, or enumeration
a.b::c;
^
(demo)
This tends to hint to me that there can't be any legal case of a qualified-id on the right of a member access.
c++
add a comment |
In C++ consider the grammar rule:
member-access-expression: LHS member-access-operator RHS
(op is .)
andLHS=unqualified id-expression e.g. that references an instance variable.RHS=qualified id-expression (with at least one nested identifier)
example: a.b::c
If that can ever pass the semantic check, what situation would it be ?
The following experiment:
struct B;
struct A
B b;
;
int main()
A a;
a.b::c;
returns
'b' is not a class, namespace, or enumeration
a.b::c;
^
(demo)
This tends to hint to me that there can't be any legal case of a qualified-id on the right of a member access.
c++
add a comment |
In C++ consider the grammar rule:
member-access-expression: LHS member-access-operator RHS
(op is .)
andLHS=unqualified id-expression e.g. that references an instance variable.RHS=qualified id-expression (with at least one nested identifier)
example: a.b::c
If that can ever pass the semantic check, what situation would it be ?
The following experiment:
struct B;
struct A
B b;
;
int main()
A a;
a.b::c;
returns
'b' is not a class, namespace, or enumeration
a.b::c;
^
(demo)
This tends to hint to me that there can't be any legal case of a qualified-id on the right of a member access.
c++
In C++ consider the grammar rule:
member-access-expression: LHS member-access-operator RHS
(op is .)
andLHS=unqualified id-expression e.g. that references an instance variable.RHS=qualified id-expression (with at least one nested identifier)
example: a.b::c
If that can ever pass the semantic check, what situation would it be ?
The following experiment:
struct B;
struct A
B b;
;
int main()
A a;
a.b::c;
returns
'b' is not a class, namespace, or enumeration
a.b::c;
^
(demo)
This tends to hint to me that there can't be any legal case of a qualified-id on the right of a member access.
c++
c++
edited May 22 at 12:15
Lightness Races in Orbit
302k56489843
302k56489843
asked May 22 at 9:38
v.oddouv.oddou
4,27012449
4,27012449
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
A very simple example is if you want to call a member function of a parent class:
struct A
void f();
;
struct B: A
void f();
;
B b;
b.A::f();
very interesting. then the "kind" referred-to by anything placed in the position ofAhas to be struct/class /union/namespace/enum ?
– v.oddou
May 22 at 9:45
@v.oddou It's not that surprising. Those "kinds" are what the scope resolution operator is used for.
– Peter
May 22 at 9:48
1
@Peter perfect. So I have everything: the grammar is valid; and the semantic situation where it's correct: whenArefers to a symbol of kinduser defined type.
– v.oddou
May 22 at 9:57
WithAlooked up relatively from the scope ofdecltype(b)? is it also legal to dob.::A::f()? (seems to build fine in gcc)
– v.oddou
May 22 at 9:59
2
You don't even need inheritance.A::f()is a valid name for the functionf()insideA, period. coliru.stacked-crooked.com/a/67d13365926585bd
– Lightness Races in Orbit
May 22 at 12:12
|
show 4 more comments
A use case is accessing members of an enum within some struct A by using an instance of A (rather than using the enum directly via A::b::c):
struct A
enum class b c ; // can be unscoped as well
;
A a;
a.b::c; // Access to enum value c - similarly, A::b::c would work
mesmerizing. I knew you could use an instance to access a static field, but not a type. Your answer is important for me to widen the exhaustivity of the use cases of id-expression in combination with member-access-expression. thanks !
– v.oddou
May 23 at 2:52
add a comment |
Here's a trivial example:
struct A
void f()
;
int main()
A a;
a.A::f();
A::f() is a qualified version of the name for the function f that's a member of A. You can use it in member access just like the "short" (or unqualified) name.
In fact, one might argue that every time you write a.f(), that's a shortcut for a.A::f() (with the A:: part being taken automatically from decltype(a)).
There's nothing magic about this, though it's unusual to see the construct outside of the sort of scenarios the other answerers demonstrated, because in this example it's redundant.
superb. This is a 3rd example of different flavor which brings value. It confirms that the RHS of a member-access is looked up from the scope of its LHS but the result of the evaluation of the LHS sub-expression is not necessarily used.
– v.oddou
May 23 at 2:56
fully-qualifiedis it ? if it lacks the global scope it is qualified but not fully, IMHO.
– v.oddou
May 23 at 2:57
@v.oddou Hmm... good question! I don't know actually. It's not a standard term anyway and I can't remember what conventional usage is. I'll just rip out the "fully-" as it's a distraction anyway.
– Lightness Races in Orbit
May 23 at 10:33
@v.oddou Looks like you're right!
– Lightness Races in Orbit
May 23 at 10:46
add a comment |
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%2f56253767%2fis-there-a-context-where-the-expression-a-bc-makes-sense%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
A very simple example is if you want to call a member function of a parent class:
struct A
void f();
;
struct B: A
void f();
;
B b;
b.A::f();
very interesting. then the "kind" referred-to by anything placed in the position ofAhas to be struct/class /union/namespace/enum ?
– v.oddou
May 22 at 9:45
@v.oddou It's not that surprising. Those "kinds" are what the scope resolution operator is used for.
– Peter
May 22 at 9:48
1
@Peter perfect. So I have everything: the grammar is valid; and the semantic situation where it's correct: whenArefers to a symbol of kinduser defined type.
– v.oddou
May 22 at 9:57
WithAlooked up relatively from the scope ofdecltype(b)? is it also legal to dob.::A::f()? (seems to build fine in gcc)
– v.oddou
May 22 at 9:59
2
You don't even need inheritance.A::f()is a valid name for the functionf()insideA, period. coliru.stacked-crooked.com/a/67d13365926585bd
– Lightness Races in Orbit
May 22 at 12:12
|
show 4 more comments
A very simple example is if you want to call a member function of a parent class:
struct A
void f();
;
struct B: A
void f();
;
B b;
b.A::f();
very interesting. then the "kind" referred-to by anything placed in the position ofAhas to be struct/class /union/namespace/enum ?
– v.oddou
May 22 at 9:45
@v.oddou It's not that surprising. Those "kinds" are what the scope resolution operator is used for.
– Peter
May 22 at 9:48
1
@Peter perfect. So I have everything: the grammar is valid; and the semantic situation where it's correct: whenArefers to a symbol of kinduser defined type.
– v.oddou
May 22 at 9:57
WithAlooked up relatively from the scope ofdecltype(b)? is it also legal to dob.::A::f()? (seems to build fine in gcc)
– v.oddou
May 22 at 9:59
2
You don't even need inheritance.A::f()is a valid name for the functionf()insideA, period. coliru.stacked-crooked.com/a/67d13365926585bd
– Lightness Races in Orbit
May 22 at 12:12
|
show 4 more comments
A very simple example is if you want to call a member function of a parent class:
struct A
void f();
;
struct B: A
void f();
;
B b;
b.A::f();
A very simple example is if you want to call a member function of a parent class:
struct A
void f();
;
struct B: A
void f();
;
B b;
b.A::f();
answered May 22 at 9:42
HoltHolt
26.8k65497
26.8k65497
very interesting. then the "kind" referred-to by anything placed in the position ofAhas to be struct/class /union/namespace/enum ?
– v.oddou
May 22 at 9:45
@v.oddou It's not that surprising. Those "kinds" are what the scope resolution operator is used for.
– Peter
May 22 at 9:48
1
@Peter perfect. So I have everything: the grammar is valid; and the semantic situation where it's correct: whenArefers to a symbol of kinduser defined type.
– v.oddou
May 22 at 9:57
WithAlooked up relatively from the scope ofdecltype(b)? is it also legal to dob.::A::f()? (seems to build fine in gcc)
– v.oddou
May 22 at 9:59
2
You don't even need inheritance.A::f()is a valid name for the functionf()insideA, period. coliru.stacked-crooked.com/a/67d13365926585bd
– Lightness Races in Orbit
May 22 at 12:12
|
show 4 more comments
very interesting. then the "kind" referred-to by anything placed in the position ofAhas to be struct/class /union/namespace/enum ?
– v.oddou
May 22 at 9:45
@v.oddou It's not that surprising. Those "kinds" are what the scope resolution operator is used for.
– Peter
May 22 at 9:48
1
@Peter perfect. So I have everything: the grammar is valid; and the semantic situation where it's correct: whenArefers to a symbol of kinduser defined type.
– v.oddou
May 22 at 9:57
WithAlooked up relatively from the scope ofdecltype(b)? is it also legal to dob.::A::f()? (seems to build fine in gcc)
– v.oddou
May 22 at 9:59
2
You don't even need inheritance.A::f()is a valid name for the functionf()insideA, period. coliru.stacked-crooked.com/a/67d13365926585bd
– Lightness Races in Orbit
May 22 at 12:12
very interesting. then the "kind" referred-to by anything placed in the position of
A has to be struct/class /union/namespace/enum ?– v.oddou
May 22 at 9:45
very interesting. then the "kind" referred-to by anything placed in the position of
A has to be struct/class /union/namespace/enum ?– v.oddou
May 22 at 9:45
@v.oddou It's not that surprising. Those "kinds" are what the scope resolution operator is used for.
– Peter
May 22 at 9:48
@v.oddou It's not that surprising. Those "kinds" are what the scope resolution operator is used for.
– Peter
May 22 at 9:48
1
1
@Peter perfect. So I have everything: the grammar is valid; and the semantic situation where it's correct: when
A refers to a symbol of kind user defined type.– v.oddou
May 22 at 9:57
@Peter perfect. So I have everything: the grammar is valid; and the semantic situation where it's correct: when
A refers to a symbol of kind user defined type.– v.oddou
May 22 at 9:57
With
A looked up relatively from the scope of decltype(b) ? is it also legal to do b.::A::f() ? (seems to build fine in gcc)– v.oddou
May 22 at 9:59
With
A looked up relatively from the scope of decltype(b) ? is it also legal to do b.::A::f() ? (seems to build fine in gcc)– v.oddou
May 22 at 9:59
2
2
You don't even need inheritance.
A::f() is a valid name for the function f() inside A, period. coliru.stacked-crooked.com/a/67d13365926585bd– Lightness Races in Orbit
May 22 at 12:12
You don't even need inheritance.
A::f() is a valid name for the function f() inside A, period. coliru.stacked-crooked.com/a/67d13365926585bd– Lightness Races in Orbit
May 22 at 12:12
|
show 4 more comments
A use case is accessing members of an enum within some struct A by using an instance of A (rather than using the enum directly via A::b::c):
struct A
enum class b c ; // can be unscoped as well
;
A a;
a.b::c; // Access to enum value c - similarly, A::b::c would work
mesmerizing. I knew you could use an instance to access a static field, but not a type. Your answer is important for me to widen the exhaustivity of the use cases of id-expression in combination with member-access-expression. thanks !
– v.oddou
May 23 at 2:52
add a comment |
A use case is accessing members of an enum within some struct A by using an instance of A (rather than using the enum directly via A::b::c):
struct A
enum class b c ; // can be unscoped as well
;
A a;
a.b::c; // Access to enum value c - similarly, A::b::c would work
mesmerizing. I knew you could use an instance to access a static field, but not a type. Your answer is important for me to widen the exhaustivity of the use cases of id-expression in combination with member-access-expression. thanks !
– v.oddou
May 23 at 2:52
add a comment |
A use case is accessing members of an enum within some struct A by using an instance of A (rather than using the enum directly via A::b::c):
struct A
enum class b c ; // can be unscoped as well
;
A a;
a.b::c; // Access to enum value c - similarly, A::b::c would work
A use case is accessing members of an enum within some struct A by using an instance of A (rather than using the enum directly via A::b::c):
struct A
enum class b c ; // can be unscoped as well
;
A a;
a.b::c; // Access to enum value c - similarly, A::b::c would work
edited May 22 at 20:47
answered May 22 at 11:13
andreeeandreee
2,1261125
2,1261125
mesmerizing. I knew you could use an instance to access a static field, but not a type. Your answer is important for me to widen the exhaustivity of the use cases of id-expression in combination with member-access-expression. thanks !
– v.oddou
May 23 at 2:52
add a comment |
mesmerizing. I knew you could use an instance to access a static field, but not a type. Your answer is important for me to widen the exhaustivity of the use cases of id-expression in combination with member-access-expression. thanks !
– v.oddou
May 23 at 2:52
mesmerizing. I knew you could use an instance to access a static field, but not a type. Your answer is important for me to widen the exhaustivity of the use cases of id-expression in combination with member-access-expression. thanks !
– v.oddou
May 23 at 2:52
mesmerizing. I knew you could use an instance to access a static field, but not a type. Your answer is important for me to widen the exhaustivity of the use cases of id-expression in combination with member-access-expression. thanks !
– v.oddou
May 23 at 2:52
add a comment |
Here's a trivial example:
struct A
void f()
;
int main()
A a;
a.A::f();
A::f() is a qualified version of the name for the function f that's a member of A. You can use it in member access just like the "short" (or unqualified) name.
In fact, one might argue that every time you write a.f(), that's a shortcut for a.A::f() (with the A:: part being taken automatically from decltype(a)).
There's nothing magic about this, though it's unusual to see the construct outside of the sort of scenarios the other answerers demonstrated, because in this example it's redundant.
superb. This is a 3rd example of different flavor which brings value. It confirms that the RHS of a member-access is looked up from the scope of its LHS but the result of the evaluation of the LHS sub-expression is not necessarily used.
– v.oddou
May 23 at 2:56
fully-qualifiedis it ? if it lacks the global scope it is qualified but not fully, IMHO.
– v.oddou
May 23 at 2:57
@v.oddou Hmm... good question! I don't know actually. It's not a standard term anyway and I can't remember what conventional usage is. I'll just rip out the "fully-" as it's a distraction anyway.
– Lightness Races in Orbit
May 23 at 10:33
@v.oddou Looks like you're right!
– Lightness Races in Orbit
May 23 at 10:46
add a comment |
Here's a trivial example:
struct A
void f()
;
int main()
A a;
a.A::f();
A::f() is a qualified version of the name for the function f that's a member of A. You can use it in member access just like the "short" (or unqualified) name.
In fact, one might argue that every time you write a.f(), that's a shortcut for a.A::f() (with the A:: part being taken automatically from decltype(a)).
There's nothing magic about this, though it's unusual to see the construct outside of the sort of scenarios the other answerers demonstrated, because in this example it's redundant.
superb. This is a 3rd example of different flavor which brings value. It confirms that the RHS of a member-access is looked up from the scope of its LHS but the result of the evaluation of the LHS sub-expression is not necessarily used.
– v.oddou
May 23 at 2:56
fully-qualifiedis it ? if it lacks the global scope it is qualified but not fully, IMHO.
– v.oddou
May 23 at 2:57
@v.oddou Hmm... good question! I don't know actually. It's not a standard term anyway and I can't remember what conventional usage is. I'll just rip out the "fully-" as it's a distraction anyway.
– Lightness Races in Orbit
May 23 at 10:33
@v.oddou Looks like you're right!
– Lightness Races in Orbit
May 23 at 10:46
add a comment |
Here's a trivial example:
struct A
void f()
;
int main()
A a;
a.A::f();
A::f() is a qualified version of the name for the function f that's a member of A. You can use it in member access just like the "short" (or unqualified) name.
In fact, one might argue that every time you write a.f(), that's a shortcut for a.A::f() (with the A:: part being taken automatically from decltype(a)).
There's nothing magic about this, though it's unusual to see the construct outside of the sort of scenarios the other answerers demonstrated, because in this example it's redundant.
Here's a trivial example:
struct A
void f()
;
int main()
A a;
a.A::f();
A::f() is a qualified version of the name for the function f that's a member of A. You can use it in member access just like the "short" (or unqualified) name.
In fact, one might argue that every time you write a.f(), that's a shortcut for a.A::f() (with the A:: part being taken automatically from decltype(a)).
There's nothing magic about this, though it's unusual to see the construct outside of the sort of scenarios the other answerers demonstrated, because in this example it's redundant.
edited May 23 at 10:33
answered May 22 at 12:13
Lightness Races in OrbitLightness Races in Orbit
302k56489843
302k56489843
superb. This is a 3rd example of different flavor which brings value. It confirms that the RHS of a member-access is looked up from the scope of its LHS but the result of the evaluation of the LHS sub-expression is not necessarily used.
– v.oddou
May 23 at 2:56
fully-qualifiedis it ? if it lacks the global scope it is qualified but not fully, IMHO.
– v.oddou
May 23 at 2:57
@v.oddou Hmm... good question! I don't know actually. It's not a standard term anyway and I can't remember what conventional usage is. I'll just rip out the "fully-" as it's a distraction anyway.
– Lightness Races in Orbit
May 23 at 10:33
@v.oddou Looks like you're right!
– Lightness Races in Orbit
May 23 at 10:46
add a comment |
superb. This is a 3rd example of different flavor which brings value. It confirms that the RHS of a member-access is looked up from the scope of its LHS but the result of the evaluation of the LHS sub-expression is not necessarily used.
– v.oddou
May 23 at 2:56
fully-qualifiedis it ? if it lacks the global scope it is qualified but not fully, IMHO.
– v.oddou
May 23 at 2:57
@v.oddou Hmm... good question! I don't know actually. It's not a standard term anyway and I can't remember what conventional usage is. I'll just rip out the "fully-" as it's a distraction anyway.
– Lightness Races in Orbit
May 23 at 10:33
@v.oddou Looks like you're right!
– Lightness Races in Orbit
May 23 at 10:46
superb. This is a 3rd example of different flavor which brings value. It confirms that the RHS of a member-access is looked up from the scope of its LHS but the result of the evaluation of the LHS sub-expression is not necessarily used.
– v.oddou
May 23 at 2:56
superb. This is a 3rd example of different flavor which brings value. It confirms that the RHS of a member-access is looked up from the scope of its LHS but the result of the evaluation of the LHS sub-expression is not necessarily used.
– v.oddou
May 23 at 2:56
fully-qualified is it ? if it lacks the global scope it is qualified but not fully, IMHO.– v.oddou
May 23 at 2:57
fully-qualified is it ? if it lacks the global scope it is qualified but not fully, IMHO.– v.oddou
May 23 at 2:57
@v.oddou Hmm... good question! I don't know actually. It's not a standard term anyway and I can't remember what conventional usage is. I'll just rip out the "fully-" as it's a distraction anyway.
– Lightness Races in Orbit
May 23 at 10:33
@v.oddou Hmm... good question! I don't know actually. It's not a standard term anyway and I can't remember what conventional usage is. I'll just rip out the "fully-" as it's a distraction anyway.
– Lightness Races in Orbit
May 23 at 10:33
@v.oddou Looks like you're right!
– Lightness Races in Orbit
May 23 at 10:46
@v.oddou Looks like you're right!
– Lightness Races in Orbit
May 23 at 10:46
add a comment |
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.
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%2f56253767%2fis-there-a-context-where-the-expression-a-bc-makes-sense%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