error: expected one of `!` or `::`, found `A`
  --> $DIR/issue-105330.rs:8:14
   |
LL | impl TraitWAssocConst for impl Demo {
   |                                     - while parsing this item list starting here
LL |
LL |     pubconst A: str = 32;
   |              ^ expected one of `!` or `::`
LL | }
   | - the item list ends here

error[E0404]: expected trait, found struct `Demo`
  --> $DIR/issue-105330.rs:6:32
   |
LL | impl TraitWAssocConst for impl Demo {
   |                                ^^^^ not a trait

error[E0658]: associated const equality is incomplete
  --> $DIR/issue-105330.rs:11:28
   |
LL | fn foo<A: TraitWAssocConst<A=32>>() {
   |                            ^^^^
   |
   = note: see issue #92827 <https://github.com/rust-lang/rust/issues/92827> for more information
   = help: add `#![feature(associated_const_equality)]` to the crate attributes to enable
   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date

error[E0658]: associated const equality is incomplete
  --> $DIR/issue-105330.rs:17:29
   |
LL | fn main<A: TraitWAssocConst<A=32>>() {
   |                             ^^^^
   |
   = note: see issue #92827 <https://github.com/rust-lang/rust/issues/92827> for more information
   = help: add `#![feature(associated_const_equality)]` to the crate attributes to enable
   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date

error[E0562]: `impl Trait` is not allowed in impl headers
  --> $DIR/issue-105330.rs:6:27
   |
LL | impl TraitWAssocConst for impl Demo {
   |                           ^^^^^^^^^
   |
   = note: `impl Trait` is only allowed in arguments and return types of functions and methods

error[E0131]: `main` function is not allowed to have generic parameters
  --> $DIR/issue-105330.rs:17:8
   |
LL | fn main<A: TraitWAssocConst<A=32>>() {
   |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `main` cannot have generic parameters

error[E0277]: the trait bound `Demo: TraitWAssocConst` is not satisfied
  --> $DIR/issue-105330.rs:12:11
   |
LL |     foo::<Demo>()();
   |           ^^^^ the trait `TraitWAssocConst` is not implemented for `Demo`
   |
note: required by a bound in `foo`
  --> $DIR/issue-105330.rs:11:11
   |
LL | fn foo<A: TraitWAssocConst<A=32>>() {
   |           ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `foo`

error[E0618]: expected function, found `()`
  --> $DIR/issue-105330.rs:12:5
   |
LL | fn foo<A: TraitWAssocConst<A=32>>() {
   | ----------------------------------- `foo::<Demo>` defined here returns `()`
LL |     foo::<Demo>()();
   |     ^^^^^^^^^^^^^--
   |     |
   |     call expression requires function

error[E0277]: the trait bound `Demo: TraitWAssocConst` is not satisfied
  --> $DIR/issue-105330.rs:20:11
   |
LL |     foo::<Demo>();
   |           ^^^^ the trait `TraitWAssocConst` is not implemented for `Demo`
   |
note: required by a bound in `foo`
  --> $DIR/issue-105330.rs:11:11
   |
LL | fn foo<A: TraitWAssocConst<A=32>>() {
   |           ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `foo`

error: aborting due to 9 previous errors

Some errors have detailed explanations: E0131, E0277, E0404, E0562, E0618, E0658.
For more information about an error, try `rustc --explain E0131`.
