#include <cstddef>
#include <iostream>
template<std::size_t R, std::size_t C>
struct foo {};
template<std::size_t R, std::size_t C>
class bar {
public:
bar(const foo<R, C>& = foo<R, C>()) {}
};
int main() {
bar<10, 10> y;
std::cout << 'x';
}
Приведенный выше код compiles and runs correctly (печать x
в качестве вывода) на г V4.8 ++, в то время как та же does not even compile на Clang v3.4 ++, требуя в error: unknown type name 'C'
. Почему результат компиляции отличается от двух версий?Почему clang ++ не компилирует тот же файл, что и g ++?
Команды, используемые для компиляции являются:
g++-4.8 -std=c++11 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
clang++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
По крайней мере, вы должны указать заголовок, где определен 'std :: size_t'. – juanchopanza
@juanchopanza, абсолютно верно, исправлено. (проблема, конечно, все еще там) – Shoe
Похож на ошибку компилятора – uk4321